jq select 其中 属性 按名称包含 属性
jq select where property contains property by name
我有一个基本的JSON结构:
{
"A": {
"Option1": {
"contains": {
"inner1": { ... },
"inner2": { ... },
"innerN": { ... }
}
}
"Option2": {
"innerX": { ... },
"innerY": { ... },
"innerZ": { ... }
}
}
}
我需要的是 select 根据是否包含用户输入 Option1
或 Option2
。
例如:
- 如果用户提供
inner1
,return Option1
对象
- 如果用户提供
innerY
return Option2
对象
- 等等
如果选项是一个数组,我已经成功了,但如果它们本身是对象,我就不能这样做了。
我试着查看 this example using descend
但没完全理解。
更新 1
我有一个草率的方法来做这个然后重用表达式:
jq -r 'paths | select(.[-1] == "inner1") | .[0:-2] | join(".")' myFile.json
我可以将它存储在一个变量中并重新使用它。但这似乎草率。不过,这是一种解决方法。
为了测试这一点,我这样做了:
jq .$(THAT_COMMAND_ABOVE) myFile.json
使用您的方法,您需要的 jq filter
是 getpath
:
getpath(paths | select(.[-1] == "inner1") | .[0:-2])
作为替代方案,您也可以使用 ..
,例如也许:
.. | objects | map_values( select(has("inner1"))) | select(length>0)
我有一个基本的JSON结构:
{
"A": {
"Option1": {
"contains": {
"inner1": { ... },
"inner2": { ... },
"innerN": { ... }
}
}
"Option2": {
"innerX": { ... },
"innerY": { ... },
"innerZ": { ... }
}
}
}
我需要的是 select 根据是否包含用户输入 Option1
或 Option2
。
例如:
- 如果用户提供
inner1
,returnOption1
对象 - 如果用户提供
innerY
returnOption2
对象 - 等等
如果选项是一个数组,我已经成功了,但如果它们本身是对象,我就不能这样做了。
我试着查看 this example using descend
但没完全理解。
更新 1
我有一个草率的方法来做这个然后重用表达式:
jq -r 'paths | select(.[-1] == "inner1") | .[0:-2] | join(".")' myFile.json
我可以将它存储在一个变量中并重新使用它。但这似乎草率。不过,这是一种解决方法。
为了测试这一点,我这样做了:
jq .$(THAT_COMMAND_ABOVE) myFile.json
使用您的方法,您需要的 jq filter
是 getpath
:
getpath(paths | select(.[-1] == "inner1") | .[0:-2])
作为替代方案,您也可以使用 ..
,例如也许:
.. | objects | map_values( select(has("inner1"))) | select(length>0)