[英]Flatten/merge JSON into single array of objects with JQ
我正在尝试将父 json object 中的嵌套对象数组合并到带有jq
的单个对象数组中。 基本上我想将对象的每个value
数组合并到data
数组下方的单个values
数组中。
示例输入:
{
"data": [
{
"id": 1,
"error": "error1",
"key": "key1",
"value": [
{
"class_name": "namespace_read",
"in_max": 148,
"in_min": 112,
"in_rate": 359750.71875
},
{
"class_name": "namespace_write",
"in_max": 184,
"in_min": 152,
"in_rate": 656.1185913085938
},
{
"class_name": "namespace_test",
"in_max": 152,
"in_min": 152,
"in_rate": 29.93098068237305
}
]
},
{
"id": 2,
"error": "error2",
"key": "key2",
"value": [
{
"class_name": "namespace_read",
"in_max": 156,
"in_min": 112,
"in_rate": 459885.03125
},
{
"class_name": "namespace_write",
"in_max": 176,
"in_min": 152,
"in_rate": 8970.888671875
},
{
"class_name": "namespace_test",
"in_max": 152,
"in_min": 152,
"in_rate": 262.3605346679688
}
]
}
]
}
所需的 Output:
{
"data": [
{
"values": [
{
"id": 1,
"error": "error1",
"key": "key1",
"class_name": "namespace_read",
"in_max": 148,
"in_min": 112,
"in_rate": 359750.71875
},
{
"id": 1,
"error": "error1",
"key": "key1",
"class_name": "namespace_write",
"in_max": 184,
"in_min": 152,
"in_rate": 656.1185913085938
},
{
"id": 1,
"error": "error1",
"key": "key1",
"class_name": "namespace_test",
"in_max": 152,
"in_min": 152,
"in_rate": 29.93098068237305
},
{
"id": 2,
"error": "error2",
"key": "key2",
"class_name": "namespace_read",
"in_max": 156,
"in_min": 112,
"in_rate": 459885.03125
},
{
"id": 2,
"error": "error2",
"key": "key2",
"class_name": "namespace_write",
"in_max": 176,
"in_min": 152,
"in_rate": 8970.888671875
},
{
"id": 2,
"error": "error2",
"key": "key2",
"class_name": "namespace_test",
"in_max": 152,
"in_min": 152,
"in_rate": 262.3605346679688
}
]
}
]
}
我正在尝试使用 jq 进行类似下面的操作,但我正在尝试找到一种更具可扩展性的方法来制作 output:
{ "id": .data[].id, "error": .data[].error, "key": .data[].key, "className": .data[].value[].class_name, "inMax": .data[].value[].in_max }
扁平化可以通过这里的惯用表达式del(A) + A[]来完成,剩下的就是构建周围的结构,这是微不足道的。
.data |= [{values: map(del(.value) + .value[])}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.