将新数组添加到现有的JSON文件jq bash

时间:2017-02-02 06:35:25

标签: json shell jq

假设我有以下大型json

    {
    "firsttag": {
    "secondtag": [
      {
        "thirdtag": [
          {
            "someothertag": [
              {
                "sample":"else"
              },
              {                    
                "targetBlank": true,                    
              }
            ],            
            "interestingtag": [
              {
                "refId": "A",
                "target": "abc",
              },
              {
                "refId": "B",
                "target": "bbb",
              },
              {
                "refId": "C",
                "target": "ccc",
              }
            ],                
          },
      },
  "overwrite": true
}

我的JSON可能在语法上并不完美但是因为我已经编辑了一些东西。现在我想做的是,我想在interestingtag下添加与其他输入类似的其他输入。例如,我希望它像

"interestingtag": [
              {
                "refId": "A",
                "target": "abc"
              },
              {
                "refId": "B",
                "target": "bbb"
              },
              {
                "refId": "C",
                "target": "ccc"
              },
              {
                "refId": "D",
                "target": "ddd"
              }
            ],

但我无法弄明白该怎么做。我可以使用

检索正确的位置
jq '.firsttag.secondtag[0].thirdtag[0].interestingtag' myfile.json

但是当我尝试简单的

jq '.firsttag.secondtag[0].thirdtag[0].interestingtag + {"refId": "D", "refID": "C"}' myfile.json

我得到了

jq: error: array and object cannot be added

知道我怎么能这样做吗?或者我做错了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

+不会向数组追加元素。您希望使用|= .+ [...]

中所述的jq '.firsttag.secondtag[0].thirdtag[0].interestingtag |= .+ [{"refId": "D", "refID": "C"}]' myfile.json 合并数组
Manager().Namespace()