[英]How do I remove an extra square bracket from JSON in Python?
我有以下形式的 JSON:
{"blah":
[
[
{"first":
{"something":"that","something":"else","another":"thing","key":"value"}...[etc.]
}
]
]
}
我试图在 Python 中解析。 我已经导入了 json (或 simplejson,具体取决于您使用的 Python 的版本)并且一切顺利,直到我到达这个块:
for result in page['blah']:
that = result['first']
a_list.append(that)
这会引发错误“TypeError:列表索引必须是整数,而不是 str”。
我很确定这个错误是由于额外的一对方括号使 JSON 内部看起来像一个列表。
假设是这种情况,我的问题是,如何删除它并且仍然有有效的 JSON 解析为字典?
欢迎其他解决方法。 如果我需要提供更多信息,请告诉我。 谢谢!
(添加了缺少的大括号并更改了一些令人困惑的术语——我试图在飞行中提出通用术语,对于任何混淆感到抱歉。)
如果总是有一组“额外”的数组括号:
for result in page['blah']:
that = result[0]['this']
list.append(that)
无需从 JSON 字符串中移除括号。 我认为确保只删除权利是不值得的。 只需找出访问所需值的正确方法即可。
“额外的”括号不是唯一的问题。 this
是 object 的属性,它是first
的值。 所以要访问this
,你必须写
that = result[0]['first']['this']
这是否总是有效取决于遗漏的 JSON 数据。
首先,您是对的 - 您的错误与 Python 数据类型和 JSON output 的错误使用有关。
其次,在创建变量时不要使用list
和所有其他 Python 保留字。
最后,如果您只是想获取'this'内键的所有结果,可以尝试使用以下代码:
data = {"blah":
[
[
{"first":
{"this":"that",
"something":"else","another":"thing","key":"value"}}
]
]
}
outres = []
for k,v in data.items():#iterate over top dictionary('blah',....)
for sv in v: # iterate through first list
for tv in sv: # iterate through second list
for fk,fv in tv.iteritems(): # iterate through each dicionary from second list
if 'this' in fv:
outres.append(fv['this'])
print outres
请注意,我的示例基于您的数据示例 - 因此,如果您的数据结构中有任何其他级别,或者应该应用任何其他规则,则应修改代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.