在另一个文件的json的空数组中插入一个文件的json
我想从devices_format.json文件中插入这段代码在另一个文件的json的空数组中插入一个文件的json,json,shell,insert,add,jq,Json,Shell,Insert,Add,Jq,我想从devices_format.json文件中插入这段代码 { "devices": [ { "name": "new_elsys", "objects": [ { "name": "ServerRoomTemp", "datapoint_type": "measurement", "coder_field": "temperature" } ]
{
"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
我修改了帖子以使其更清晰,提前谢谢大家,祝你们过得愉快:p确保数据有效后的一种方法是明确指定空数组的路径:
jq --argfile insert devices_format.json '
.drivers.lorawan.interfaces[0].devices |= [$insert]
' test_3.json
相当于。。。
如果要将每个空的.devices数组替换为指定的JSON,可以使用walk/1,例如:
请将您的努力也张贴到问题上,并修复数据,使其成为有效的JSON。您可以使用jq来查找错误,或者使用jslint.com,等等!您有答案吗?请参阅更新。我没有注意到您想要[$insert]。事实上,我想在test_3.json的空设备数组中插入json devices_format.json。您可以添加一个注释,说明这样做与使用输入作为+=[input]之间的权衡,并解释哪一个更好?谢谢!第一个解决方案不起作用,第二个解决方案与期望的结果不符..谢谢,我不想替换每个空数组,只替换test_3.json中的设备数组。请参阅更新,确保仅检查设备。
jq -n 'input as $insert
| input
| .drivers.lorawan.interfaces[0].devices |= [$insert]
' devices_format.json test_3.json
jq -n 'input as $insert
| input
| walk(if type=="object" and .devices == []
then .devices = [$insert]
else . end)
' devices_format.json test_3.json