JSON 解析 [`jq`]: 获取祖父母的兄弟姐妹的价值

JSON parsing [`jq`]: Get value of grandparent’s sibling

例子

{
  "gp_sibling": "desired_value",
  "grand-parent": {
    "parent": [
      {
        "key": "known_value",
        "sibling": "asdf"
      }
    ]
  }
}

问题定义

我有一个大JSON。我知道 key 有一个独特的价值。我需要获取它的 grand-parent 的兄弟键值(gp_sibling 键的值)。

现在,我可以 grep JSON,但我想使用 jq。但是我不知道如何实现这个(我只使用 jq 进行简单查询)。

备注

虽然我知道jq也可以用在Windows上,但我只用在Linux上。

Post 更新

  1. 从示例中删除了逗号。一些格式修复。

如果你只想得到元素gb_sibling,你可以使用下面的方法:

jq .gp_sibling <file>

如果你只想在 key 元素有它的值时得到它,你可以试试这个:

jq 'select(."grand-parent"?.parent?[]?.key=="known_value")|.gp_sibling' <file>

这个,过滤掉parent里面grand-parent里面的属性key的内容等于known_value.

的元素

根据该结果,gp_sibling 被选中。

[注意]

grand-parent 被引用是因为破折号否则会导致问题。

我对这个问题的解读是,none 个键名(除了 "key" 之外)要在查询中使用,如果有多个 "grand-parent sibling"一个字符串,我们想要它们。

paths(.key? == "known_value") as $p
| getpath($p[0:-4])
| .[]
| select(type=="string")