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 更新
- 从示例中删除了逗号。一些格式修复。
如果你只想得到元素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")
例子
{
"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 更新
- 从示例中删除了逗号。一些格式修复。
如果你只想得到元素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")