2016-03-08 131 views
0

我想弄清楚如何使用jq從一些JSON中刪除數組元素。 下面是輸入和期望的輸出。如何用jq去除數組元素?

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" 
    } 
    ] 
} 
+0

你想刪除剛纔'數組[1]'或所有元素'數組'超過第一個,即,如果'Array'具有兩個以上的元素,輸出應該是什麼? – jwodder

+0

在這種情況下,只有兩個數組元素,我想刪除第二個數組元素。但更一般地說,我試圖瞭解jq如何允許選擇性數組元素控制。也許下一次我想刪除數組元素1,3,5和11。 –

回答

2

最簡單的是:

del(.Array[1]) 
5

關於Paul Ericson的問題的第二部分

但更一般地,我試圖瞭解JQ將如何允許選擇性數組元素控制。也許下一次我想刪除數組元素1,3,5和11

要刪除元素1,3,5和11只使用

del(
    .Array[1,3,5,11] 
) 

但一般而言,您可以使用更復雜的過濾器作爲del的參數。例如,該過濾器刪除其.foobar2關鍵是"barfoo2".Array元素:

del(
    .Array[] 
    | select(.foobar2 == "barfoo2") 
) 

生產在這個例子中

{ 
    "blah0": "zeroblah", 
    "Array": [ 
    { 
     "blah1": [ 
     "key1:val1" 
     ], 
     "foobar0": "barfoo0", 
     "foobar1": "barfoo1" 
    } 
    ] 
}