JSON解析[`jq`]:获取祖父母的值’;兄弟姐妹 例子 问题定义
我有一个大的JSON。我知道JSON解析[`jq`]:获取祖父母的值’;兄弟姐妹 例子 问题定义,json,jq,tree-traversal,Json,Jq,Tree Traversal,我有一个大的JSON。我知道键具有唯一的值。我需要获取它的祖父母的兄弟键值(gp_兄弟键的值) 现在,我可以grepJSON,但我想使用jq。但我不知道如何实现这一点(我只使用jq进行简单查询) 笔记 虽然我知道jq也可以在Windows上使用,但我只在Linux上使用它 发布更新 从示例中删除了逗号。一些格式化修复 如果您只想获取元素gb\u同级,可以使用以下命令: jq .gp_sibling <file> 这样,它会过滤属性键内部父项内部父项等于已知值的元素 从该结果中,选择
键
具有唯一的值。我需要获取它的祖父母的兄弟键值(gp_兄弟键的值)
现在,我可以grep
JSON,但我想使用jq
。但我不知道如何实现这一点(我只使用jq
进行简单查询)
笔记
虽然我知道jq
也可以在Windows上使用,但我只在Linux上使用它
发布更新
如果您只想获取元素
gb\u同级
,可以使用以下命令:
jq .gp_sibling <file>
这样,它会过滤属性键
内部父项
内部父项
等于已知值
的元素
从该结果中,选择了gp_同级
[注意]
grandparent
被引用是因为破折号会导致其他问题。我对这个问题的理解是,除了“key”之外,所有的键名都不会在查询中使用,如果有多个“grandparent sibling”是一个字符串,我们希望它们都是
paths(.key? == "known_value") as $p
| getpath($p[0:-4])
| .[]
| select(type=="string")
我认为他想榨取gp|U兄弟姐妹的价值jq“.gp|sibling”应该足够了(在这里测试)@MarcoMassetti你说得对。我已经编辑了答案。太好了@dan1st,您的解决方案适用于提供的示例,但我无法使其适用于原始密钥名()。出现错误:
jq:error:syntax error,意外的无效字符,应为$end(Unix shell引用问题?),位于第1行:
。你能帮我一下吗?@tukusejsirs这是因为网络用户界面。您应该只将内容放在过滤器中的'…'
中,而不是整个命令中。好的。在我添加[]
之前,我的输出是空白的,并没有公开数据(我忽略了整个数据是方括号)。所以在最后,我使用了[some_command]| jq-r'.[].[]选择(“父代”?.parent?[?.key==“已知值”)|.gp_同级”
jq 'select(."grand-parent"?.parent?[]?.key=="known_value")|.gp_sibling' <file>
paths(.key? == "known_value") as $p
| getpath($p[0:-4])
| .[]
| select(type=="string")