2016-03-08 55 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" 
    } 
    ] 
}