将一个文件的 json 插入到另一个文件的 json 的空数组中
insert, the json of a file, in the empty array of a json of another file
我想从 devices_format.json 文件中插入这段代码
{
"devices": [
{
"name": "new_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
},
{
"name": "old_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
}
]
}
在test_3.json
的空数组中
{
"drivers": {
"lorawan": {
"interfaces": [
{
"devices": []
}
]
}
}
}
结果应该是这样的
{
"drivers": {
"lorawan": {
"interfaces": [
{
"devices": [
{
"devices": [
{
"name": "new_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
},
{
"name": "old_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
}
]
}
]
}
]
}
}
}
我尝试使用 jq,但我想知道是否也可以使用 jshn
我修改了 post 以使其更清楚,提前谢谢你们,祝你们愉快 :P
一种方法(确保数据有效后JSON)是显式指定空数组的路径:
jq --argfile insert devices_format.json '
.drivers.lorawan.interfaces[0].devices |= [$insert]
' test_3.json
等价于...
jq -n 'input as $insert
| input
| .drivers.lorawan.interfaces[0].devices |= [$insert]
' devices_format.json test_3.json
如果您希望每个空的 .devices 数组都被指定的 JSON 替换,您可以使用 walk/1
,例如:
jq -n 'input as $insert
| input
| walk(if type=="object" and .devices == []
then .devices = [$insert]
else . end)
' devices_format.json test_3.json
我想从 devices_format.json 文件中插入这段代码
{
"devices": [
{
"name": "new_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
},
{
"name": "old_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
}
]
}
在test_3.json
的空数组中{
"drivers": {
"lorawan": {
"interfaces": [
{
"devices": []
}
]
}
}
}
结果应该是这样的
{
"drivers": {
"lorawan": {
"interfaces": [
{
"devices": [
{
"devices": [
{
"name": "new_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
},
{
"name": "old_elsys",
"objects": [
{
"name": "ServerRoomTemp",
"datapoint_type": "measurement",
"coder_field": "temperature"
}
]
}
]
}
]
}
]
}
}
}
我尝试使用 jq,但我想知道是否也可以使用 jshn
我修改了 post 以使其更清楚,提前谢谢你们,祝你们愉快 :P
一种方法(确保数据有效后JSON)是显式指定空数组的路径:
jq --argfile insert devices_format.json '
.drivers.lorawan.interfaces[0].devices |= [$insert]
' test_3.json
等价于...
jq -n 'input as $insert
| input
| .drivers.lorawan.interfaces[0].devices |= [$insert]
' devices_format.json test_3.json
如果您希望每个空的 .devices 数组都被指定的 JSON 替换,您可以使用 walk/1
,例如:
jq -n 'input as $insert
| input
| walk(if type=="object" and .devices == []
then .devices = [$insert]
else . end)
' devices_format.json test_3.json