将一个文件的 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