繁体   English   中英

使用 JQ 获取唯一的嵌套 JSON 密钥

[英]Get unique nested JSON keys with JQ

如何使用 JQ 从属性键中获取唯一键

{"id":1, "attributes":{"a": 1, "b": 2, "c": 3}}
{"id":2, "attributes":{"a": 4, "b": 5, "d": 6}}
{"id":3, "name":"ABC"}

像这样的结果 [ "a", "b", "c", "d" ]

我正在尝试这样

jq '.attributes' test.json | jq -r '[inputs | keys[]] | unique | sort'

或者

jq -r '[inputs.attributes | keys[]] | unique | sort' test.json

但出现错误

jq: 错误 (at:11): null (null) has no keys

一种方法是在后续inputs上使用reduce

jq 'reduce inputs.attributes as $a (.attributes; . + $a) | keys'
[
  "a",
  "b",
  "c",
  "d"
]

演示

按照您的第二次尝试:

jq -n '[inputs.attributes // empty | keys_unsorted[]] | unique'

重要的一点是我们必须处理没有“属性”键的情况。

还要注意unique排序,所以(除非你使用 gojq)我们可以使用keys_unsorted来避免冗余排序。

啜饮:

jq -s 'map(.attributes|keys?)|add|unique' test.json

暂无
暂无

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

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