我得到了如下所示的JSON
{ "keyword1": { "identifier1": 16 }, "keyword2": { "identifier2": 16 } }
并且我需要遍历关键字来获取标识符(不确定我在这里使用的术语是否正确)。看起来很简单,但是因为关键字的名称都不一样,所以我不知道如何处理。
pzfprimi1#
此问题的原始标签为jq,因此下面是jq解决方案:
jq
.[] | keys[]
例如,使用问题中所示的输入:
$ jq '.[] | keys[]' input.json "identifier1" "identifier2"
要按照键名称在JSON对象中出现的顺序检索它们,请使用keys_unsorted。
keys_unsorted
ybzsozfc2#
我认为沿着几种方法会很有效:
jq '. | to_entries | .[].key'
字符串请参见https://stedolan.github.io/jq/manual/#to_entries、来自_entries、带有_entries或者如果你想从一个变量中获取值:
JSON_DATA={main:{k1:v1,k2:v2}} result=$(jq -n "$JSON_DATA" | jq '.main | to_entries | .[].value' --raw-output) echo $result ##outputs: v1 v2
rslzwgfq3#
我来到这里,希望从我的JSON中整理出一堆键,我发现了两个方便的特性。有三个函数“to_entries”,“from_entries”和“with_entries”。你可以通过键或值过滤值,就像这样:
JSON_DATA=' { "fields": { "first": null, "second": "two", "third": "three" } } ' echo "$JSON_DATA" | jq '{fields: .fields | with_entries(select(.value != null and .key != "third")) }'
输出:
{ "fields": { "second": "two" } }
dced5bon4#
更简单的解决方案--只需要将内部哈希值当作新的哈希值,然后再添加一个过滤器。
$ docker network inspect bridge|jq '.[]|.Containers' { "35c9e1273c43db01c45b5f43f6999d04c18beff3996ea09fb8b87a8b635c38ff": { "Name": "nginx", "EndpointID": "a6e788d6f90eb14df2321a2eb02517f0862c1fe7fe50c02f2b8c103c0c79cb6b", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "b46c157cec243969f9227251dfd6fa65b7a904e145df80a63f79d4dc8b281355": { "Name": "sweet_gates", "EndpointID": "a600d9c1ee35b9f7db31249ae8f589c202e0b260e10a394757a88bfd66b5b42f", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }
由于我只需要几个字段,请在above .json中再添加一个查询:
$ docker network inspect bridge|jq -jr '.[]|.Containers[]|.IPv4Address, "\t", .Name, "\n"' 172.17.0.2/16 nginx 172.17.0.3/16 sweet_gates
4条答案
按热度按时间pzfprimi1#
此问题的原始标签为
jq
,因此下面是jq
解决方案:例如,使用问题中所示的输入:
要按照键名称在JSON对象中出现的顺序检索它们,请使用
keys_unsorted
。ybzsozfc2#
我认为沿着几种方法会很有效:
字符串
请参见https://stedolan.github.io/jq/manual/#to_entries、来自_entries、带有_entries
或者如果你想从一个变量中获取值:
rslzwgfq3#
我来到这里,希望从我的JSON中整理出一堆键,我发现了两个方便的特性。有三个函数“to_entries”,“from_entries”和“with_entries”。你可以通过键或值过滤值,就像这样:
输出:
dced5bon4#
更简单的解决方案--只需要将内部哈希值当作新的哈希值,然后再添加一个过滤器。
由于我只需要几个字段,请在above .json中再添加一个查询: