【问题标题】:How do I remove an extra square bracket from JSON in Python?如何在 Python 中从 JSON 中删除多余的方括号?
【发布时间】:2011-07-01 17:56:30
【问题描述】:

我有以下形式的 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 must be integers, not str”。

我很确定这个错误是由于额外的一对方括号使里面的 JSON 看起来像一个列表。

如果是这种情况,我的问题是,我如何删除它并且仍然有有效的 JSON 来解析为字典?

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

(添加了缺少的大括号并更改了一些令人困惑的术语——我试图在飞行中提出通用术语,抱歉有任何混淆。)

【问题讨论】:

  • 你好像少了一个大括号。
  • 能否贴出完整的代码,因为正如毛哲豪所说,你好像少了一条评论,很难判断你的问题是来自这个还是来自其他的......

标签: python json


【解决方案1】:

如果总是有一组“额外”的数组括号:

for result in page['blah']:
    that = result[0]['this']
    list.append(that)

【讨论】:

  • Felix 的回答正确地指出示例结构与您的代码示例不太匹配。如果您确实想要 JSON 对象的“内部”值,而不是最外面的大括号内的整个对象,那么您需要做类似的事情。
【解决方案2】:

不需要从 JSON 字符串中删除括号。我认为确保仅删除权利是不值得的。只需找出访问所需值的正确方法即可。

“额外”括号不是唯一的问题。 this 是一个对象的属性,它是first 的值。所以要访问this,你必须写

that = result[0]['first']['this']

这是否总是有效取决于遗漏的 JSON 数据。

【讨论】:

  • 啊,对不起,我想出通用词。你是绝对正确的,请放心,我在实际代码中既没有使用“this”也没有使用“list”。
【解决方案3】:

首先,您是对的 - 您的错误与 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多