Jqを使用してJSONから配列要素を削除する方法を理解しようとしています。以下は、入力と必要な出力です。
jq .Array[0]
必要な配列要素を出力します。
{
"blah1": [
"key1:val1"
],
"foobar0": "barfoo0",
"foobar1": "barfoo1"
}
しかし、これを次のように再ラップするにはどうすればよいですか?
{
"blah0": "zeroblah",
"Array": [
そして
]
}
入力:
{
"blah0": "zeroblah",
"Array": [
{
"blah1": [
"key1:val1"
],
"foobar0": "barfoo0",
"foobar1": "barfoo1"
},
{
"blah2": [
"key2:val2"
],
"foobar2": "barfoo2",
"foobar3": "barfoo3"
}
]
}
必要な出力:
{
"blah0": "zeroblah",
"Array": [
{
"blah1": [
"key1:val1"
],
"foobar0": "barfoo0",
"foobar1": "barfoo1"
}
]
}
Paul Ericson の質問の2番目の部分について
しかし、もっと一般的には、jqがどのように選択的な配列要素の制御を可能にするかを理解しようとしています。次回は、配列要素1、3、5、11を削除したいと思います。
要素1、3、5、11を削除するには、
del(
.Array[1,3,5,11]
)
ただし、一般的には、del
の引数としてより高度なフィルターを使用できます。たとえば、このフィルタは、.Array
キーが.foobar2
である"barfoo2"
内の要素を削除します。
del(
.Array[]
| select(.foobar2 == "barfoo2")
)
この例で生成する
{
"blah0": "zeroblah",
"Array": [
{
"blah1": [
"key1:val1"
],
"foobar0": "barfoo0",
"foobar1": "barfoo1"
}
]
}
最も単純なものは次のとおりです。
del(.Array[1])