【问题标题】:Unable to iterate through JSON data无法遍历 JSON 数据
【发布时间】:2018-05-26 20:23:35
【问题描述】:

我正在尝试遍历 JSON 数据以查找特定键的值。我的数据来自一个 http 请求,数据看起来像:

{'1': {'manufacturername': 'SVLJ',
       'modelid': 'TCL014',
       'name': 'Fling'},
'10': {'manufacturername': 'SONY',
    'modelid': 'BLL4554',
    'name': 'ACQ'}}

我当前的目标是循环遍历每个项目编号(1、10 等)并获取光的值('fling'、'acq' 等)。我最近的尝试是:

import requests

RESOURCE_URL = 'xxx/xxx/'

def get_json(url):
    raw_response = requests.get(url)
    data = raw_response.json()
    return data

def get_SMR():
    url = "{}SMR/".format(RESOURCE_URL)
    return get_json(url)

smr_json = get_SMR()

for SMR in smr_json:
    print(SMR['name'])

当我尝试运行它时,我得到了错误:

TypeError: string indices must be integers

我也尝试过导入 json 库,并使用 json.loads(raw_response.text);但是,它仍然被识别为字符串,而不是可迭代的 json 对象(可以通过键引用)。任何和所有的见解将不胜感激。

【问题讨论】:

    标签: python json python-3.x python-requests


    【解决方案1】:

    当您执行for SMR in smr_json: 时,您是在遍历字典的键。换句话说,SMR 是一个字符串,它不允许按字符串进行索引:

    In [1]: SMR = 'test'
    
    In [2]: SMR['string']
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    ...  
    TypeError: string indices must be integers
    

    您的意思是遍历键和值:

    for key, SMR in smr_json.items():
        print(SMR['name'])
    

    或者,只是值:

    for SMR in smr_json.values():
        print(SMR['name'])
    

    【讨论】:

    • 完美!非常感谢你为我解决这个问题。我很欣赏详尽的解释。
    【解决方案2】:

    您可能会收到一个字符串,因为它不是有效的 JSON。 JSON 需要 " 用于字符串,而不是 '

    json.org:

    字符串是零个或多个 Unicode 字符的序列,用双引号括起来,使用反斜杠转义。

    【讨论】:

      【解决方案3】:

      我认为问题出在 JSON 文件中。不允许使用单引号。

      我首先将单引号 ' 替换为双引号 " ,得到如下内容:

      {
      	"1": {
      		"manufacturername": "SVLJ",
      		"modelid": "TCL014",
      		"name": "Fling"
      	},
      	"10": {
      		"manufacturername": "SONY",
      		"modelid": "BLL4554",
      		"name": "ACQ"
      	}
      }

      【讨论】:

        猜你喜欢
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        相关资源
        最近更新 更多