Замените вложенный объект объектом из другого файла в JQ

#json #jq

Вопрос:

У меня есть файл json, который имеет следующие структуры

 {
  "a":"aval",
  "b":{},
  "c":"cval"
}
 

У меня есть еще один файл json со следующим содержимым

 {
  "b1":"b1val","b2":"b2val"
}
 

Я хочу вставить объект json из файла 2 в «b» из файла 1

 {
  "a":"aval",
  "b":{
      "b1":"b1val","b2":"b2val"
  },
  "c":"cval"
}
 

как мне это сделать с помощью JQ

Ответ №1:

Предполагая, что файл № 2 может быть не пустым, вы можете просто назначить input .b .

 jq '.b = input' file1 file2
 

Онлайн-демонстрация

В противном случае вы бы использовали следующее, чтобы сохранить исходное значение .b , когда файл #2 пуст.

 jq -n 'input | .b = first(inputs, .b)' file1 file2
 

Комментарии:

1. Миллион раз спасибо, я потратил на это так много времени, что я бы ни за что не догадался об этом ответе.