如何用jq删除数组元素?

Pau*_*son 7 json jq

我试图找出如何使用jq从某些JSON中删除数组元素.以下是输入和所需输出.

jq .Array[0] 
Run Code Online (Sandbox Code Playgroud)

输出我想要的数组元素.

{
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    }
Run Code Online (Sandbox Code Playgroud)

但是我如何重新包装:

{
  "blah0": "zeroblah",
  "Array": [
Run Code Online (Sandbox Code Playgroud)

  ]
}
Run Code Online (Sandbox Code Playgroud)

输入:

{
  "blah0": "zeroblah",
  "Array": [
    {
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    },
    {
      "blah2": [
        "key2:val2"
      ],
      "foobar2": "barfoo2",
      "foobar3": "barfoo3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{
  "blah0": "zeroblah",
  "Array": [
    {
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

jq1*_*727 20

关于保罗·埃里克森问题的第二部分

但更一般地说,我试图理解jq如何允许选择性数组元素控制.也许下次我要删除数组元素1,3,5和11.

删除元素1,3,5和11只需使用

del(
    .Array[1,3,5,11]
)
Run Code Online (Sandbox Code Playgroud)

但一般来说,您可以使用更复杂的过滤器作为参数del.例如,此过滤器删除.Array.foobar2键中的元素"barfoo2":

del(
    .Array[]
  | select(.foobar2 == "barfoo2")
)
Run Code Online (Sandbox Code Playgroud)

在这个例子中产生

{
  "blah0": "zeroblah",
  "Array": [
    {
      "blah1": [
        "key1:val1"
      ],
      "foobar0": "barfoo0",
      "foobar1": "barfoo1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)


pea*_*eak 8

在这种特殊情况下,最简单的是:

del(.Array[1])
Run Code Online (Sandbox Code Playgroud)

更一般地,如果您想删除数组中除第一个之外的所有项目:

.Array |= [.[0]]
Run Code Online (Sandbox Code Playgroud)