简体   繁体   English

将多个JSON合并为一个(Python)

[英]Merge multiple JSON into single one (Python)

I am searching for a way to merge multiple JSONs into a single one. 我正在寻找一种将多个JSON合并为一个的方法。 My output is in this format: 我的输出是这种格式:

[{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}]
[{"Nome bollettino": "Bollettino 2"}, {"Causale": "2"}, {"Numero": "2"}]
[{"Nome bollettino": "Bollettino 3"}, {"Causale": "3"}, {"Numero": "3"}]
[{"Nome bollettino": "Bollettino 4"}, {"Causale": "4"}, {"Numero": "4"}]
[{"Nome bollettino": "Bollettino 5"}, {"Causale": "5"}, {"Numero": "5"}]
[{"Nome bollettino": "Bollettino 6"}, {"Causale": "6"}, {"Numero": "6"}]
[{"Nome bollettino": "Bollettino 7"}, {"Causale": "7"}, {"Numero": "7"}]
[{"Nome bollettino": "Bollettino 8"}, {"Causale": "8"}, {"Numero": "8"}]
[{"Nome bollettino": "Bollettino 9"}, {"Causale": "9"}, {"Numero": "9"}]
[{"Nome bollettino": "Bollettino 10"}, {"Causale": "10"}, {"Numero": "10"}]

Every single line is a valid JSON. 每行都是有效的JSON。 I a looking for a way to do it in Python, like this site do. 我正在寻找一种使用Python做到这一点的方法,就像本网站一样。 Here you can find the code I am using to generate JSON data. 在这里,您可以找到我用来生成JSON数据的代码。

I have tried to use jsonmerge and json-merger but it's not so effective. 我试图使用jsonmergejson-merger但是效果不是很好。 The site above do the work perfect but I need to do it in Python. 上面的网站可以完美地完成工作,但是我需要使用Python来完成。

Particularly, with jsonmerge using the syntax from the documentation , the output is only the first two values... 特别是,使用文档中语法的 jsonmerge ,输出只是前两个值...

result = merge(bollettini, causale, numero)
print(result)

{'Nome bollettino': 'Bollettino 1', 'Causale': '1'}
{'Nome bollettino': 'Bollettino 2', 'Causale': '2'}
{'Nome bollettino': 'Bollettino 3', 'Causale': '3'}

etc...

...which are not even JSON's. ...甚至不是JSON的。

How to merge them ? 如何合并它们?

Or like this with a 2D array output. 或像这样使用2D阵列输出。

import json


idx = 0
count = [idx]
data = []
while idx < 10:
  idx += 1

  bollettini = {'Nome bollettino': 'Bollettino ' + str(idx) }
  causale    = {'Causale': str(idx) }
  numero =     {'Numero': str(idx)  }


  data.append([bollettini]+[causale]+[numero])

json_data = json.dumps(data)
print (json_data) #added parenthesis

Say you have multiple jsons as list of lists like 假设您有多个json作为列表列表,例如

l = [[{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}]
[{"Nome bollettino": "Bollettino 2"}, {"Causale": "2"}, {"Numero": "2"}]
[{"Nome bollettino": "Bollettino 3"}, {"Causale": "3"}, {"Numero": "3"}]
[{"Nome bollettino": "Bollettino 4"}, {"Causale": "4"}, {"Numero": "4"}]
[{"Nome bollettino": "Bollettino 5"}, {"Causale": "5"}, {"Numero": "5"}]
[{"Nome bollettino": "Bollettino 6"}, {"Causale": "6"}, {"Numero": "6"}]
[{"Nome bollettino": "Bollettino 7"}, {"Causale": "7"}, {"Numero": "7"}]
[{"Nome bollettino": "Bollettino 8"}, {"Causale": "8"}, {"Numero": "8"}]
[{"Nome bollettino": "Bollettino 9"}, {"Causale": "9"}, {"Numero": "9"}]
[{"Nome bollettino": "Bollettino 10"}, {"Causale": "10"}, {"Numero": "10"}]]

You just need to chain the lists to form a single one! 您只需要将列表链接成一个列表即可! Read more on itertools.chain here 此处阅读有关itertools.chain更多信息

>>> from itertools import chain
>>> list(chain.from_iterable(l))

after dumping your data as json Output: 将数据转储为json输出后:

[{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}, {"Nome bollettino": "Bollettino 2"}, {"Causale": "2"}, {"Numero": "2"}, {"Nome bollettino": "Bollettino 3"}, {"Causale": "3"}, {"Numero": "3"}, {"Nome bollettino": "Bollettino 4"}, {"Causale": "4"}, {"Numero": "4"}, {"Nome bollettino": "Bollettino 5"}, {"Causale": "5"}, {"Numero": "5"}, {"Nome bollettino": "Bollettino 6"}, {"Causale": "6"}, {"Numero": "6"}, {"Nome bollettino": "Bollettino 7"}, {"Causale": "7"}, {"Numero": "7"}, {"Nome bollettino": "Bollettino 8"}, {"Causale": "8"}, {"Numero": "8"}, {"Nome bollettino": "Bollettino 9"}, {"Causale": "9"}, {"Numero": "9"}, {"Nome bollettino": "Bollettino 10"}, {"Causale": "10"}, {"Numero": "10"}]

... it is quite unclear what you want have, may that helps: ...目前尚不清楚您想要什么,这可能会有所帮助:

input = [
    [{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}],
    [{"Nome bollettino": "Bollettino 2"}, {"Causale": "2"}, {"Numero": "2"}],
    [{"Nome bollettino": "Bollettino 3"}, {"Causale": "3"}, {"Numero": "3"}],
    [{"Nome bollettino": "Bollettino 4"}, {"Causale": "4"}, {"Numero": "4"}],
    [{"Nome bollettino": "Bollettino 5"}, {"Causale": "5"}, {"Numero": "5"}],
    [{"Nome bollettino": "Bollettino 6"}, {"Causale": "6"}, {"Numero": "6"}],
    [{"Nome bollettino": "Bollettino 7"}, {"Causale": "7"}, {"Numero": "7"}],
    [{"Nome bollettino": "Bollettino 8"}, {"Causale": "8"}, {"Numero": "8"}],
    [{"Nome bollettino": "Bollettino 9"}, {"Causale": "9"}, {"Numero": "9"}],
    [{"Nome bollettino": "Bollettino 10"}, {"Causale": "10"}, {"Numero": "10"}]
]

result = []
for line in input:
    result.append({k:v for x in line for (k,v) in x.items()})

result: 结果:

[{'Causale': '1', 'Nome bollettino': 'Bollettino 1', 'Numero': '1'},
 {'Causale': '2', 'Nome bollettino': 'Bollettino 2', 'Numero': '2'},
 {'Causale': '3', 'Nome bollettino': 'Bollettino 3', 'Numero': '3'},
 {'Causale': '4', 'Nome bollettino': 'Bollettino 4', 'Numero': '4'},
 {'Causale': '5', 'Nome bollettino': 'Bollettino 5', 'Numero': '5'},
 {'Causale': '6', 'Nome bollettino': 'Bollettino 6', 'Numero': '6'},
 {'Causale': '7', 'Nome bollettino': 'Bollettino 7', 'Numero': '7'},
 {'Causale': '8', 'Nome bollettino': 'Bollettino 8', 'Numero': '8'},
 {'Causale': '9', 'Nome bollettino': 'Bollettino 9', 'Numero': '9'},
 {'Causale': '10', 'Nome bollettino': 'Bollettino 10', 'Numero': '10'}]

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

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