如何合并多个JSON文件与维护架构?

时间:2019-04-13 08:32:31

标签: python json

我有多个看起来像这样的json文件(Benoni_0-100.json等):

{
   "matches":[
      {
         "platformId":"TR1",
         "gameId":379560441,
         "champion":62,
         "queue":410,
         "season":7,
         "timestamp":1460529442141,
         "role":"NONE",
         "lane":"JUNGLE"
      }
   ],
   "startIndex":4200,
   "endIndex":4201,
   "totalGames":4201
}

当我尝试使用以下代码合并到两个文件时,它可以工作。

import json

with open("Benoni_0-100.json") as fo:
    data1 = json.load(fo)

with open("Benoni_100-200.json") as fo:
    data2 = json.load(fo)

data1['matches'].extend(data2['matches'])

with open("test.json", "w") as fo:
    json.dump(data1, fo)

但是我有多个文件,想要批量合并。当我尝试以下代码时,它失败。

data = '{"matches": []}'
folder = glob.glob("*.json")
for filename in folder:
    with open(filename) as file:
        data1 = json.loads(data)
        datanew = json.load(file)
        data1['matches'].extend(datanew['matches'])
with open("test.json", "w") as fo:
    json.dump(data1, fo)

输出为:

TypeError: string indices must be integers

我已经尝试了数小时的各种方法,但都失败了。谁能帮我吗?

编辑:使用以下代码解决了它。

data = '{"matches": []}'
data_1 = json.loads(data)
folder = glob.glob("*.json")

for filename in folder:
    try:
        with open(filename) as fo:
            data_new = json.load(fo)
            data_1['matches'].extend(data_new['matches'])
    except:
        print(filename)

with open("test.json", "w") as fo:
    json.dump(data_1, fo)

2 个答案:

答案 0 :(得分:0)

'matches'是一个列表,可能也很简洁

dict['matches'] += otherdict['matches']

如果您不是扩展字典,而是列出 你有一个字典列表

答案 1 :(得分:0)

运行您的批处理合并代码,没有任何错误,并且输出存储在test.json中。您确定不执行代码中其他地方的操作而导致此错误吗?

但是要注意的一点是,由于在循环的每次迭代中都重新定义了test.json,因此您在得到的data1中只会得到一个条目输出。