[英]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.