我在python中读取数据时遇到问题。其中一行的样本是:
foo_brackets='{"KEY2":[{"KEY2a":[{"KEY2a1":"4","KEY2a2":"5"},{"KEY2a1":"6","KEY2a2":"7"}],"KEY2b":"8"}],"KEY3":"9"}'
当我使用json
加载时,KEY2
的值会作为列表读入,因为括号会阻止我获得我想要的结果,这是{的值{1}}:
KEY2b
我可以尝试删除括号,但实际上有一个值应该是列表>>> import json
>>> foo_brackets_json=json.loads(foo_brackets)
>>> foo_brackets_json['KEY2']['KEY2b']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
。如果我删除所有括号并尝试转换为JSON:
KEY2a
>>> foo_no_brackets='{"KEY2":{"KEY2a":{"KEY2a1":"4","KEY2a2":"5"},{"KEY2a1":"6","KEY2a2":"7"},"KEY2b":"8"},"KEY3":"9"}'
>>> json.loads(foo_no_brackets)
# Traceback omitted since it's just the python error
ValueError: Expecting property name: line 1 column 45 (char 45)
似乎确实是有效的JSON(我测试了here,并删除了引号)并获得了以下内容:
foo_brackets
我有没有办法阅读{
"KEY2":[
{
"KEY2a":[
{
"KEY2a1":"4",
"KEY2a2":"5"
},
{
"KEY2a1":"6",
"KEY2a2":"7"
}
],
"KEY2b":"8"
}
],
"KEY3":"9"
}
这样的对象,以便我可以致电foo_brackets
?
答案 0 :(得分:1)
foo_brackets_json['KEY2']
引用列表,此处包含一个元素。
您必须使用整数索引来引用该列表中包含的词典:
foo_brackets_json['KEY2'][0]['KEY2b']
不要试图移除支架;这里可能有0个或更多嵌套字典。你必须确定在你没有1个嵌套字典的情况下会发生什么。
上面的硬编码引用假设列表中总是至少有一个这样的字典,并不关心是否有多个字典。
您可以使用循环来处理0或更多情况:
for nested in foo_brackets_json['KEY2']:
print(nested['KEY2b'])
现在,您将逐个处理每个嵌套字典。这将适用于空列表情况,如果有多个。
您可能会出现0或多个错误:
if len(foo_brackets_json['KEY2']) != 1:
raise ValueError('Unexpected number of results')
等。这一切都取决于你的实际用例。