无法遍历JSON数据

时间:2017-12-13 02:35:57

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

我试图遍历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对象(可以通过键引用)。任何和所有的见解将不胜感激。

3 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:0)

您可能正在获取字符串,因为它不是有效的JSON。 JSON要求"表示字符串,而不是'

请参阅json.org

  

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

答案 2 :(得分:0)

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

我首先用双引号替换单引号',得到类似这样的内容:

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