Я хочу использовать jq для объединения нескольких файлов, и если несколько файлов содержат массив с именем, мне нужно объединить массивы (порядок не имеет значения).
Например
file1
{
"value1": 200,
"timestamp": 1382461861,
"parameter": [
{"param": 1}
]
}
file2
{
"status": 200,
"timestamp": 1382461861,
"value": {
"aaa": {
"value3": "v3",
"value4": 4
}
},
"parameter" [
{"param": 2}
]
}
для объединения этих json предлагается другие статьи переполнения стека, я должен сделать:
jq -s '.[0] * .[1]' file1 file2
пока это не получитсяя:
{
"value1": 200,
"timestamp": 1382461861,
"parameter": [
{
"param": 2
}
],
"status": 200,
"value": {
"aaa": {
"value3": "v3",
"value4": 4
}
}
}
где то, что я хочу:
{
"value1": 200,
"timestamp": 1382461861,
"parameter": [
{ "param": 1},
{ "param": 2}
],
"status": 200,
"value": {
"aaa": {
"value3": "v3",
"value4": 4
}
}
}
обратите внимание, что массив "параметров" должен содержать элементы из файла file1 и file2
Мне также нужнорешение, которое не требует указания полей этого массива, а массивы могут быть вложены на любом уровне json
Я готов принять решение, которое не использует jq, небольшой скрипт на pythonвсе будет в порядке, я думаю,
самое близкое решение, которое я нашел, требует, чтобы я знал, что параметр - это массив
jq -s '.[0] * .[1]' file1.json file2.json >temp.json
jq -s '.[0].parameter=([.[].parameter]|flatten)|.[0]' temp.json file1.json
, а вывод -
{
"value1": 200,
"timestamp": 1382461861,
"parameter": [
{
"param": 2
},
{
"param": 1
}
],
"status": 200,
"value": {
"aaa": {
"value3": "v3",
"value4": 4
}
}
}