【发布时间】:2016-08-06 14:07:36
【问题描述】:
我在 python 中读取数据时遇到问题。其中一行的样本是:
foo_brackets='{"KEY2":[{"KEY2a":[{"KEY2a1":"4","KEY2a2":"5"},{"KEY2a1":"6","KEY2a2":"7"}],"KEY2b":"8"}],"KEY3":"9"}'
当我使用json 加载时,KEY2 的值作为列表读入,因为括号,这会阻止我获得我想要的结果,即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
我可以尝试删除括号,但实际上有一个值应该是一个列表,KEY2a。如果我去掉所有括号并尝试转换为 JSON,您可以看到这一点:
>>> 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)
foo_brackets 似乎是有效的 JSON(我测试了here,去掉了引号)并得到以下信息:
{
"KEY2":[
{
"KEY2a":[
{
"KEY2a1":"4",
"KEY2a2":"5"
},
{
"KEY2a1":"6",
"KEY2a2":"7"
}
],
"KEY2b":"8"
}
],
"KEY3":"9"
}
问题:
有没有办法让我读取像foo_brackets 这样的对象,以便我可以调用foo_brackets_json['KEY2']['KEY2b']?
【问题讨论】:
-
使用
foo_brackets_json['KEY2'][0]['KEY2b']有什么问题? -
为什么你认为这些括号是“额外的”?正如您所发现的,它们是有效的 JSON,它们表示 list。它们不是“额外的”,除了您似乎不期望除了 1 个这样的嵌套字典之外还有其他任何东西。
-
您说的都对 - 感谢您的快速反馈。它只是一种不同于我以前看到的格式,并且被列表和字典的组合所抛弃。
-
与
'KEY2'关联的值将字典包装在一个列表中,这很烦人。但与某些人用 JSON 做的一些真正可怕的事情相比,这是相当温和的。 :)
标签: python json python-2.7