首页 > 解决方案 > 如何用python解析嵌套的json

问题描述

我有这个要解析的 json。我想尝试从 json 中获取 id。

import requests
import json
import csv
headers = {
    "Authorization": ""
}
r = requests.get("https://discordapp.com/api/v6/users/@me/relationships", headers=headers)
rjson = json.loads(r.text)
for user in rjson['user']:
    print(user.get['id'])

错误:

Traceback (most recent call last):
  File "C:\Users\ArtyF\AppData\Roaming\Microsoft\Windows\Network Shortcuts\HWMonitor\home stealer\test.py", line 9, in <module>
    for user in rjson['user']:
TypeError: list indices must be integers or slices, not str

json:

[{'id': '265592281283821570', 'type': 1, 'nickname': None, 'user': {'id': '265592281283821570', 'username': 'Noodles83', 'avatar': '1672fac72a7dd759f013d70248da93ab', 'discriminator': '4200', 'public_flags': 256}}, {'id': '319532808471183371', 'type': 1, 'nickname': None, 'user': {'id': '319532808471183371', 'username': 'Ḟ̸͒i̴̿̕s̴̓͌ȟ̶͘ĭ̶͐ Jumpy22', 'avatar': 'a_b451bb595d70b8fce6e619bba7701d08', 'discriminator': '3325', 'public_flags': 256}}, {'id': '416700137583280140', 'type': 1, 'nickname': None, 'user': {'id': '416700137583280140', 'username': 'Kokuen', 'avatar': 'dcb8fca1d3a098925e3bbe438fec412c', 'discriminator': '3937', 'public_flags': 64}}, {'id': '469290477120782336', 'type': 1, 'nickname': None, 'user': {'id': '469290477120782336', 'username': 'Glib the Slav Muffin with Knife', 'avatar': '878adda726b86dcb86cd48282caa6d66', 'discriminator': '1835', 'public_flags': 0}}, {'id': '473572785520640004', 'type': 1, 'nickname': None, 'user': {'id': '473572785520640004', 'username': 'sixnine', 'avatar': 'a0f35cc1bd940202172c37826643b121', 'discriminator': '8092', 'public_flags': 0}}, {'id': '484444395958173697', 'type': 1, 'nickname': None, 'user': {'id': '484444395958173697', 'username': 'TheOneTrueDude', 'avatar': 'd182a52b337fb1977f610449792a0596', 'discriminator': '9561', 'public_flags': 128}}, {'id': '609551301730369547', 'type': 1, 'nickname': None, 'user': {'id': '609551301730369547', 'username': 'NotDuperTrooperISwear', 'avatar': '40c90fa40f150960a22fc54fa6bf466b', 'discriminator': '3505', 'public_flags': 0}}, {'id': '661059875350118420', 'type': 2, 'nickname': None, 'user': {'id': '661059875350118420', 'username': 'GABBY OWNS ME', 'avatar': '40ad91528d574d7ab51c912cf0bb065e', 'discriminator': '0001', 'public_flags': 0}}, {'id': '665588981840216081', 'type': 1, 'nickname': None, 'user': {'id': '665588981840216081', 'username': 'イ 丅ⓢ  イ', 'avatar': '8e0e53ac045078f186fd1c1e6467b6a1', 'discriminator': '2460', 'public_flags': 128}}, {'id': '677967750961823745', 'type': 1, 'nickname': None, 'user': {'id': '677967750961823745', 'username': 'CohenBurki', 'avatar': '7b54cef1a84060b865d34efe2768a8b4', 'discriminator': '8762', 'public_flags': 256}}, {'id': '689520973979844772', 'type': 1, 'nickname': None, 'user': {'id': '689520973979844772', 'username': 'willofthecave', 'avatar': '3658f041400b0c887330df3506609b95', 'discriminator': '2595', 'public_flags': 0}}, {'id': '715725333407727660', 'type': 1, 'nickname': None, 'user': {'id': '715725333407727660', 'username': 'Gyanying', 'avatar': 'b952e8c80073aa4eca781aac8378a825', 'discriminator': '0463', 'public_flags': 0}}, {'id': '759057934780596264', 'type': 1, 'nickname': None, 'user': {'id': '759057934780596264', 'username': 'Bumblebee', 'avatar': 'b9210bfcfcb12d57e31db19260f105e5', 'discriminator': '6947', 'public_flags': 0}}, {'id': '761580664091836457', 'type': 1, 'nickname': None, 'user': {'id': '761580664091836457', 'username': 'NiZey_', 'avatar': '118399b6a474d664590a3d4ad37f3482', 'discriminator': '0543', 'public_flags': 64}}, {'id': '773034770749587459', 'type': 1, 'nickname': None, 'user': {'id': '773034770749587459', 'username': 'V_ice', 'avatar': '4f0dbb7e5ca16fe89a243c5b75f9f1ec', 'discriminator': '0804', 'public_flags': 64}}, {'id': '820668036997447701', 'type': 2, 'nickname': None, 'user': {'id': '820668036997447701', 'username': 'Baraga', 'avatar': 'bfc0918335e77d9e6eead620aee61b52', 'discriminator': '7571', 'public_flags': 0}}, {'id': '845502938255982592', 'type': 1, 'nickname': None, 'user': {'id': '845502938255982592', 'username': 'SolarNight', 'avatar': '4622dfc3ee4ddfcd5cbeec9d744bb41b', 'discriminator': '0866', 'public_flags': 0}}, {'id': '852994138005438475', 'type': 1, 'nickname': None, 'user': {'id': '852994138005438475', 'username': 'Solar Moon', 'avatar': 'e27700d4363f9db33365841af64f23bf', 'discriminator': '0001', 'public_flags': 0}}, {'id': '857700122002718740', 'type': 2, 'nickname': None, 'user': {'id': '857700122002718740', 'username': 'DNAFridge', 'avatar': 'a10cd905ae0d499982cbbfac20cee820', 'discriminator': '1096', 'public_flags': 0}}, {'id': '885134345478766602', 'type': 1, 'nickname': None, 'user': {'id': '885134345478766602', 'username': 'deleted user 2x5F09Jr', 'avatar': '82fcd1ccbde4cbcd0edb7b1e9758de8d', 'discriminator': '7004', 'public_flags': 0}}]

标签: pythonjsonnested

解决方案


您正在跳过一个级别。由于rjson是 dicts 列表,因此您必须遍历rjson,而不是rjson['user']像错误所暗示的那样。只有这样您才能查看'user'密钥及其包含的密钥:

for user_data in rjson:
    print(user_data['user'])
    print(user_data['user']['id'])

推荐阅读