繁体   English   中英

JSON:使用带有可变键的 jq

[英]JSON: using jq with variable keys

我在一堆文件中输入了 JSON 数据,其中一个 IP 地址作为键。 我需要遍历文件,我需要从它们中取出“东西”。 每个文件的 IP 地址都不同,但我想使用单个 jq 命令来获取数据。 我已经尝试了很多东西,我最接近的是这个:

jq '.facts | keys | keys as $ip | .[0]' a_file

在我输入的a_file中:

{
    "facts": {
       "1.1.1.1": {
            "stuff":"value"
        }
    }
}

它返回IP地址,即1.1.1.1 ,但是我该如何回去做这样的事情(这显然是错误的,但我希望你明白):

jq '.facts.$ip[0].stuff' a_file

在我看来,我试图填充一个变量,然后使用该变量的值来回退输入并再次扫描它。

=== 编辑 === 请注意,我的输入实际上更像这样:

{
    "facts": {
       "1.1.1.1": {
            "stuff": {
                "thing1":"value1"
            }
        },
        "outer_thing": "outer_value"
    }
}

所以我得到了一个错误:

jq: error (at <stdin>:9): Cannot index string with string "stuff"

这修复了它 - .stuff之后的.stuff

.facts | keys_unsorted[] as $k | .[$k].stuff?

你几乎猜对了,但需要对象值迭代器构造.[]来获取与键对应的值

.facts | keys_unsorted[] as $k | .[$k].stuff

这假设在facts内部,您有一个包含 IP 地址作为密钥的对象,并且您想从中提取.stuff

或者,为了防止内部不包含stuff对象,您可以添加? 作为.[$k].stuff? . 您还可以选择根据有效的 IP 正则表达式条件验证键,并仅针对这些键过滤值。

暂无
暂无

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

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