如何在Python中去掉JSON的多余方括号?
我有一个这样的JSON格式:
{"blah":
[
[
{"first":
{"something":"that","something":"else","another":"thing","key":"value"}...[etc.]
}
]
]
}
我想在Python中解析它。我已经导入了json(或者根据你使用的Python版本,可能是simplejson),一切都进行得很顺利,直到我遇到这个代码块:
for result in page['blah']:
that = result['first']
a_list.append(that)
这段代码报错了,错误信息是“TypeError: list indices must be integers, not str”,意思是说我用字符串去索引一个列表,这是不对的。
我觉得这个错误是因为多了一对方括号,导致里面的JSON看起来像是一个列表。
我的问题是,假设真是这样,我该怎么去掉这对方括号,同时还能保持JSON是有效的,以便解析成字典呢?
其他解决办法也欢迎。如果我需要提供更多信息,请告诉我。谢谢!
(我补上了缺失的大括号,并改了一些让人困惑的术语——我试图快速想出一些通用的术语,抱歉让你感到困惑。)
相关问题:
3 个回答
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
请注意,我的示例是基于你的数据样本的 - 所以如果你的数据结构中有其他层级,或者需要应用其他规则,那么代码就需要进行调整。
0
其实不需要把JSON字符串中的括号去掉。我觉得只去掉右边的括号并不值得花那么多精力。你只需要找到正确的方法来获取你想要的值。
这些“多余”的括号并不是唯一的问题。this是一个对象的属性,而这个对象的值是first。所以要访问this,你需要这样写:
that = result[0]['first']['this']
至于这样做是否总是有效,得看你省略的JSON数据是什么样的。
1
如果总是有一组“额外”的数组括号:
for result in page['blah']:
that = result[0]['this']
list.append(that)