我一直在努力理解以下Json解析问题的原因,我已经尝试了很多组合来访问'val'项目值,但是我遇到了一堵砖墙。
我在“类似”的Json样式数据上成功使用了下面的代码,但是我没有把这种方法用于下面的数据的知识。
感谢所有建议。
result = xmltodict.parse(my_read)
result = result['REPORT']['REPORT_BODY']
result =json.dumps(result, indent=1)
print(result)
{
"PAGE": [
{
"D-ROW": [
{
"@num": "1",
"type": "wew",
"val": ".000"
},
{
"@num": "2",
"type": "wew",
"val": ".000"
}
]
},
{
"D-ROW": [
{
"@num": "26",
"type": "wew",
"val": ".000"
},
{
"@num": "27",
"type": "wew",
"val": ".000"
},
{
"@num": "28",
"type": "wew",
"val": ".000"
}
]
}
]
}
for item in json.loads(json_data):
print(item['PAGE']['D-ROW']['val']
错误字符串索引必须是整数
答案 0 :(得分:2)
item['PAGE']
包含一个列表,因此您无法使用'D-ROW'
对其进行索引。如果您的json加载数据位于变量data
中,则可以使用:
for page in data['PAGE']:
for drow in page['D-ROW']:
print drow['val']
答案 1 :(得分:2)
首先要注意的是,基于你的JSON结构,它是一个字典{"PAGE": [...], ...}
,所以当你在它上面使用json.loads()
时,你也会得到一个字典
在此for
循环中,您的item
迭代器实际上是指来自dict的键
for item in json.loads(json_data):
print(item['PAGE']['D-ROW']['val']
这是一个更容易理解的简单例子
>>> for key in json.loads('{"a": "a-value", "b": "b-value"}'):
... print(key)
...
a
b
错误字符串索引必须是整数
因此,您可以猜测在循环中item
会引用密钥"PAGE"
,并且您无法使用['D-ROW']
索引该字符串("PAGE"['D-ROW']
不会有道理,因此你的错误)
如果您使用以下循环获取项目,item
将成为(key, value)
的元组
for item in json.loads(json_data).items():
print(item)
你也可以像这样扩展键值
>>> for key, value in json.loads('{"a": "a-value", "b": "b-value"}').items():
... print("key is {} value is {}".format(key, value))
...
key is a value is a-value
key is b value is b-value
答案 2 :(得分:1)
您的JSON不应在数字值附近包含引号。例如,更改
"D-ROW": [
{
"@num": "1",
"type": "wew",
"val": ".000"
},
到
"D-ROW": [
{
"@num": 1, // Key requires quotes, Value omits quotes if number
"type": "wew",
"val": 0.000
},
答案 3 :(得分:1)
print(item['PAGE']['D-ROW']['val']
D-ROW键包含一个列表,而不是一个字典。
你应该改变
print([_item['val'] for _item in item['PAGE']['D-ROW']])
到
{{1}}
迭代包含你的词组的列表。