如何从Python中删除JSON中的额外方括号?

时间:2011-07-01 17:56:31

标签: python json

我有以下形式的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解析为词典?

欢迎其他变通方法。如果我需要提供更多信息,请告诉我。谢谢!

(添加了缺少的大括号并更改了一些令人困惑的术语 - 我试图在运行中提出通用术语,对不起任何混淆。)

3 个答案:

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

请注意,我的示例基于您的数据样本 - 因此,如果您的数据结构中有任何其他级别,或者应该应用任何其他规则,则应修改代码。