如何在Python中去掉JSON的多余方括号?

1 投票
3 回答
7732 浏览
提问于 2025-04-16 20:40

我有一个这样的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)

撰写回答