2016-12-17 69 views
1

鉴于这种输入的值排除嵌套对象:寻找一个JQ过滤器基于一个嵌套属性

{ 
    "10000703": { 
    "show_id": 1641788, 
    }, 
    "10000838": { 
    "show_id": 1517903, 
    }, 
    "10001325": { 
    "show_id": 1641788, 
    }, 
} 

我正在寻找一个过滤器,说:“返回的所有对象,其中show_id不等于1641788

预期输出是:

{ 
    "10000838": { 
    "show_id": 1517903, 
    }, 
} 

一直无法排除嵌套对象:(

+1

问:你尝试过什么? – paulsm4

+0

我尝试了一大堆涉及'walk/1'和'del()'的事情,但'with_entries/1'是我所需要的。 –

回答

1

这是with_entries/1便利的一个很好的例子,这就是可能的JQ的简洁:

with_entries(select(.value.show_id != 1641788)) 

with_entries/1对象转换为一个显式的.key/.value的表示。详情请参阅jq manual

或者与更大的简洁,可以在这种情况下,也可以使用del/1

del(.[] | select(.show_id == 1641788))