Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个文件的json的空数组中插入一个文件的json_Json_Shell_Insert_Add_Jq - Fatal编程技术网

在另一个文件的json的空数组中插入一个文件的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_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


我修改了帖子以使其更清晰,提前谢谢大家,祝你们过得愉快: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