Добавить (Map) ключи из массива json в другой массив son - PullRequest
1 голос
/ 26 сентября 2019

У меня есть 2 json файлы:

file1.json

[
 {
  "name":"value",
  "description":"value"
 },
 {
  "name":"value1",
  "description":"value1"
 }
]

file2.json

[
 {
  "url":"value"   
 },
 {
  "url":"value1"
 }
]

Ожидаемый результат:

[
 {
  "name":"value",
  "description":"value"
  "url":"value"

 },
 {
  "name":"value1",
  "description":"value1",
  "url":"value1"
 }
]

Я пытался с jq:

jq -s '.[0] * .[1]' file1 file2

Я пытался с Python, но я не знаком, и это динт работы. Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

С jq, благодаря transpose, это однострочный:

    jq -s 'transpose | map(add)' file1.json file2.json 
[
  {
    "name": "value",
    "description": "value",
    "url": "value"
  },
  {
    "name": "value1",
    "description": "value1",
    "url": "value1"
  }
]
1 голос
/ 26 сентября 2019

Попробуйте:

import json
li=[]
with open('file1.json') as f:
    li1 = json.load(f)
with open('file2.json') as f:
    li2 = json.load(f)
for a in zip(li1,li2):  # where l1 is first list, l2 is second list
    dict={}
    dict.update(a[0])
    dict.update(a[1])
    li.append(dict)

print(li)
# [{'name': 'value', 'description': 'value', 'url': 'value'}, {'name': 'value1', 'description': 'value1', 'url': 'value1'}]

ИЛИ

from collections import ChainMap
import json
with open('file1.json') as f:
    li1 = json.load(f)
with open('file2.json') as f:
    li2 = json.load(f)
li=[dict(ChainMap(*a)) for a in zip(li1,li2)]
print(li)

Надеюсь, это поможет!

...