我有以下形式的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:list indices必须是整数,而不是str”。
我很确定这个错误是由于额外的一对方括号使JSON里面看起来像一个列表。
我的问题,假设情况是这样,我如何删除它并仍然有有效的JSON解析为词典?
欢迎其他变通方法。如果我需要提供更多信息,请告诉我。谢谢!
(添加了缺少的大括号并更改了一些令人困惑的术语 - 我试图在运行中提出通用术语,对不起任何混淆。)
答案 0 :(得分:1)
如果总是只有一个“额外”数组括号:
for result in page['blah']:
that = result[0]['this']
list.append(that)
答案 1 :(得分:0)
无需从JSON字符串中删除括号。我认为确保只删除权利是不值得的。只需找出正确的方法来访问您想要的值。
“额外”括号不是唯一的问题。 this
是对象的属性,是first
的值。所以要访问this
,你必须写
that = result[0]['first']['this']
这是否总是有效取决于遗漏的JSON数据。
答案 2 :(得分:0)
首先,你是对的 - 你的错误与错误使用Python数据类型和JSON输出有关。
其次,在创建变量时不要使用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
请注意,我的示例基于您的数据样本 - 因此,如果您的数据结构中有任何其他级别,或者应该应用任何其他规则,则应修改代码。