繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM