jq:如何过滤嵌套键?

时间:2017-03-20 16:00:11

标签: json jq

我已经对stackoverflow做了很多研究,但找不到任何相关的帖子。

假设我有一个喜欢

的json
{
    "talk": {
        "docs": {
            "count": 22038185,
            "deleted": 626193
        },
        "store": {
            "size_in_bytes": 6885993125,
            "throttle_time_in_millis": 1836569
        }
    },
    "list": {
        "docs": {
            "count": 22038185,
            "deleted": 626193
        },
        "store": {
            "size_in_bytes": 6885993125,
            "throttle_time_in_millis": 1836569
        }
    }
}

我想过滤掉所有键中的“store”字段以获得类似

的输出
{
    "talk": {
        "docs": {
            "count": 22038185,
            "deleted": 626193
        }
    },
    "list": {
        "docs": {
            "count": 22038185,
            "deleted": 626193
        }
    }
} 

如何使用jq实现它?

2 个答案:

答案 0 :(得分:3)

同时使用delrecurse

jq 'del(recurse|.store?)' foo.json

您还可以使用..recurse而不带参数:

jq 'del(..|.store?)' foo.json

?可防止recurse到达.store无效过滤器的错误时出现错误。

答案 1 :(得分:3)

如果您只想删除"商店"当密钥出现在第二级时,请考虑:

map_values( del(.store) )

后记

随后,OP问道:

  

但如果删除的字段很多怎么办?我们只能保留' docs'

答案(在这种特殊情况下):

map_values( {docs} )