繁体   English   中英

如何将多个json文件与维护模式合并?

[英]How to merge multiple json files with maintaining schema?

我有多个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)

'matches'是一个列表,也可能是conactenate它

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

如果您没有扩展dicts,但列表中有一个dicts列表

运行批处理合并代码,我没有收到任何错误,输出存储在test.json 你确定你没有在代码中的其他地方做某些事情会导致这个错误吗?

但需要注意的是,在生成的test.json只能获得单个条目输出,因为在循环的每次迭代中都重新定义了data1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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