简体   繁体   English

jq:如何根据上级键名获取数组值

[英]jq: How can I get array values based on superordinate key name

I'm trying to use jq to parse the output of https://ssl-config.mozilla.org/guidelines/5.6.json , a pretty simple JSON structure.我正在尝试使用jq来解析https://ssl-config.mozilla.org/guidelines/5.6.json的输出,这是一个非常简单的 JSON 结构。

How can I get the "openssl" values if "configurations" is "modern" or "intermediate"?如果“配置”是“现代”或“中级”,我如何获得“openssl”值?

The basic JSON structure would be:基本的 JSON 结构是:

{
    "configurations": { 
        "intermediate": {
            "ciphers": {
                "openssl": [
                    "ECDHE-ECDSA-AES128-GCM-SHA256",
                    "ECDHE-RSA-AES128-GCM-SHA256",
                    "ECDHE-ECDSA-AES256-GCM-SHA384",
                    "ECDHE-RSA-AES256-GCM-SHA384",
                    "ECDHE-ECDSA-CHACHA20-POLY1305",
                    "ECDHE-RSA-CHACHA20-POLY1305",
                    "DHE-RSA-AES128-GCM-SHA256",
                    "DHE-RSA-AES256-GCM-SHA384"
                ]
            }
        }
    }
}

I had to shorten it in order to avoid the "It looks like your post is mostly code; please add some more detail" error message.我不得不缩短它以避免“看起来您的帖子主要是代码;请添加更多详细信息”错误消息。

To get all both the modern and intermediate openssl arrays, we can use:要获得所有modernintermediate openssl数组,我们可以使用:

jq '.configurations | with_entries(select([.key] | inside([ "modern", "intermediate" ])))[] | .ciphers.openssl' input

This will show:这将显示:

[]
[
  "ECDHE-ECDSA-AES128-GCM-SHA256",
  "ECDHE-RSA-AES128-GCM-SHA256",
  "ECDHE-ECDSA-AES256-GCM-SHA384",
  "ECDHE-RSA-AES256-GCM-SHA384",
  "ECDHE-ECDSA-CHACHA20-POLY1305",
  "ECDHE-RSA-CHACHA20-POLY1305",
  "DHE-RSA-AES128-GCM-SHA256",
  "DHE-RSA-AES256-GCM-SHA384"
]

To get a result with an object so we can see on what key those openssl certs are found, use something like:要获得一个对象的结果,以便我们可以看到找到这些openssl证书的key ,请使用以下内容:

jq '.configurations | to_entries | map(select([.key] | inside([ "modern", "intermediate" ])) | { "\(.key)": .value.ciphers.openssl }) | add' input

This will produce:这将产生:

{
  "modern": [],
  "intermediate": [
    "ECDHE-ECDSA-AES128-GCM-SHA256",
    "ECDHE-RSA-AES128-GCM-SHA256",
    "ECDHE-ECDSA-AES256-GCM-SHA384",
    "ECDHE-RSA-AES256-GCM-SHA384",
    "ECDHE-ECDSA-CHACHA20-POLY1305",
    "ECDHE-RSA-CHACHA20-POLY1305",
    "DHE-RSA-AES128-GCM-SHA256",
    "DHE-RSA-AES256-GCM-SHA384"
  ]
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM