使用Python解析JSON以检索字典中的值

bksxznpy  于 2023-01-22  发布在  Python
关注(0)|答案(3)|浏览(142)

我试图解析JSON并检索某个值(ID),但我得到了以下错误:

TypeError: string indices must be integers

下面是我的代码和JSON:

import json
 
# JSON string
info_symbol = '{"status":{"timestamp":"2023-01-21T15:18:43.937Z","error_code":0,"error_message":null,"elapsed":21,"credit_count":1,"notice":null},"data":{"BITCOIN":{"id":15907,"name":"HarryPotterObamaSonic10Inu","symbol":"BITCOIN"}}}'

# Convert string to Python dict
test_dict = json.loads(info_symbol)

print(test_dict['data'])
for name in test_dict['data']['BITCOIN']:
    print(name['id'])

我只想获取ID -因此:小行星15907
“编号”:15907,

esyap4oy

esyap4oy1#

在这种情况下,你不需要循环来只得到id。如果你需要字典中的所有keyvalues,那么你可以像下面这样迭代-

import json
 
# JSON string
info_symbol = '{
  "status": {
    "timestamp": "2023-01-21T15:18:43.937Z",
    "error_code": 0,
    "error_message": null,
    "elapsed": 21,
    "credit_count": 1,
    "notice": null
  },
  "data": {
    "BITCOIN": {
      "id": 15907,
      "name": "HarryPotterObamaSonic10Inu",
      "symbol": "BITCOIN"
    }
  }
}'

# Convert string to Python dict
test_dict = json.loads(info_symbol)

data = test_dict['data']['BITCOIN']
print(f"only id = {data['id']}")
print("--------")
for key, value in test_dict['data']['BITCOIN'].items():
    print(key, value)

输出

only id = 15907
--------
id 15907
name HarryPotterObamaSonic10Inu
symbol BITCOIN
3ks5zfa0

3ks5zfa02#

for name in test_dict['data']['BITCOIN']:
    print(name)

输出

{'BITCOIN': {'id': 15907, 'name': 'HarryPotterObamaSonic10Inu', 'symbol': 'BITCOIN'}}
id
name
symbol

所以,如果执行name['id'],在第一次迭代中会得到id,在第二次迭代中会抛出错误
您可以通过以下方式获得id的值:

for key, value in test_dict['data']['BITCOIN'].items():
    if key=='id':
      print(value)
#15907

理解:

[value for key, value in test_dict['data']['BITCOIN'].items() if key=='id']
[15907]
dffbzjpn

dffbzjpn3#

    • 按键错误**

研究员,test_dict['data]['BITCOIN']表示为:

{
'id': 15907,
'name': 'HarryPotterObamaSonic10Inu',
'symbol': 'BITCOIN'
}

你正在迭代上面的字典,所以当你使用print(name[id])name迭代器的时候,你会得到一个键:id,name和symbol的值。

    • 解决方案**

只需访问ID,再添加一个括号:

print( test_dict['data']['BITCOIN']['id'] )

去掉for循环。

相关问题