Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON解析[`jq`]:获取祖父母的值’;兄弟姐妹 例子 问题定义_Json_Jq_Tree Traversal - Fatal编程技术网

JSON解析[`jq`]:获取祖父母的值’;兄弟姐妹 例子 问题定义

JSON解析[`jq`]:获取祖父母的值’;兄弟姐妹 例子 问题定义,json,jq,tree-traversal,Json,Jq,Tree Traversal,我有一个大的JSON。我知道键具有唯一的值。我需要获取它的祖父母的兄弟键值(gp_兄弟键的值) 现在,我可以grepJSON,但我想使用jq。但我不知道如何实现这一点(我只使用jq进行简单查询) 笔记 虽然我知道jq也可以在Windows上使用,但我只在Linux上使用它 发布更新 从示例中删除了逗号。一些格式化修复 如果您只想获取元素gb\u同级,可以使用以下命令: jq .gp_sibling <file> 这样,它会过滤属性键内部父项内部父项等于已知值的元素 从该结果中,选择

我有一个大的JSON。我知道
具有唯一的值。我需要获取它的祖父母的兄弟键值(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")