Bimons
Bimons

Reputation: 241

Merge a list of separate JSON data into one piece of JSON data

In Python, I am trying to turn a list of separate JSON data:

[[{'id': 1, 'name': 'pencil', 'description': '2b or not 2b, that is the question'}], [{'id': 2, 'name': 'oil pastel', 'description': None}], [{'id': 3, 'name': 'gouache', 'description': None}], [{'id': 4, 'name': 'paper', 'description': None}]]

into one piece of JSON data:

{'id': 1, 'name': 'pencil', 'description': '2b or not 2b, that is the question'}, {'id': 2, 'name': 'oil pastel', 'description': None}, {'id': 3, 'name': 'gouache', 'description': None}, {'id': 4, 'name': 'paper', 'description': None}, {'id': 5, 'name': 'coloured pencil', 'description': None}

Been struggling with it for a few hours. Does anyone have any ideas?

Upvotes: 0

Views: 56

Answers (3)

Ritz
Ritz

Reputation: 238

Using functools with operator

 j = [[{'id': 1, 'name': 'pencil', 'description': '2b or not 2b, that is the question'}], [{'id': 2, 'name': 'oil pastel', 'description': None}], [{'id': 3, 'name': 'gouache', 'description': None}], [{'id': 4, 'name': 'paper', 'description': None}]]


import functools
import operator
functools.reduce(operator.iadd,j,[])

Output:

[{'id': 1,
'name': 'pencil',
  'description': '2b or not 2b, that is the question'},
 {'id': 2, 'name': 'oil pastel', 'description': None},
 {'id': 3, 'name': 'gouache', 'description': None},
 {'id': 4, 'name': 'paper', 'description': None}]

Upvotes: 1

Jay
Jay

Reputation: 24895

Use simple list-comprehension

[y for x in list_of_lists for y in x]

Output:

[{'description': '2b or not 2b, that is the question', 'id': 1, 'name': 'pencil'}, {'description': None, 'id': 2, 'name': 'oil pastel'}, {'description': None, 'id': 3, 'name': 'gouache'}, {'description': None, 'id': 4, 'name': 'paper'}]

Upvotes: 1

rafaelc
rafaelc

Reputation: 59274

Use itertools.chain

>>> list(itertools.chain.from_iterable(j))

Or a list comprehension

>>> [x[0] for x in j] # Assuming there is only one item in each list

Both outputs

[{'id': 1,
  'name': 'pencil',
  'description': '2b or not 2b, that is the question'},
 {'id': 2, 'name': 'oil pastel', 'description': None},
 {'id': 3, 'name': 'gouache', 'description': None},
 {'id': 4, 'name': 'paper', 'description': None}]

Upvotes: 1

Related Questions