-1

I am searching for a way to merge multiple JSONs into a single one. 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. I a looking for a way to do it in Python, like this site do. Here you can find the code I am using to generate JSON data.

I have tried to use jsonmerge and json-merger but it's not so effective. The site above do the work perfect but I need to do it in Python.

Particularly, with jsonmerge using the syntax from the documentation, the output is only the first two values...

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.

How to merge them ?

10
  • 1
    Why do you not include "Numero"? Commented Oct 27, 2017 at 13:51
  • Which format would you like the output JSON to be ? Commented Oct 27, 2017 at 13:51
  • @WillemVanOnsem It's the output of "jsonmerge" not mine.. Commented Oct 27, 2017 at 13:52
  • @ZdaR I don't know what do you mean. It should be a valid JSON format. Thanks Commented Oct 27, 2017 at 13:53
  • This is also a valid JSON format: [{}], what are you precisely looking for ? Commented Oct 27, 2017 at 13:53

3 Answers 3

4

Or like this with a 2D array output.

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
Sign up to request clarification or add additional context in comments.

1 Comment

The answer is related to this question.
1

... 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'}]

2 Comments

It's not valid according to jsonlint.
Yes, this is a Python object. You need to use json.dumps(result) to recieve a valid JSON string !
1

Say you have multiple jsons as list of lists like

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

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

after dumping your data as json Output:

[{"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"}]

4 Comments

It's not valid according to jsonlint
@Link Sorry, I don't get it. Can you please explain what do you mean by not valid?
Paste the output to jsonlint. It will give an invalid JSON.
Ah! That was because, the output that I pasted had single quotes ' instead of double quotes! " and that was because, for testing I copy pasted your input to a string and then processed it to get the lists! I've corrected the output!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.