使用Python

时间:2016-08-06 14:07:37

标签: python json python-2.7

我在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

1 个答案:

答案 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')

等。这一切都取决于你的实际用例。