我试图找出如何使用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)
在这种特殊情况下,最简单的是:
del(.Array[1])
Run Code Online (Sandbox Code Playgroud)
更一般地,如果您想删除数组中除第一个之外的所有项目:
.Array |= [.[0]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12804 次 |
| 最近记录: |