我有两种不同的 JSON 结构可以从中检索特定的对象值,基本上是这样的
{
"one": {
"foo": {
"bar": "baz"
}
}
}
还有一个这样的
{
"two": {
"foo": {
"bar": "qux"
}
}
}
我想退回
bar
两种情况下的值加上额外的返回变量 error
如果两种情况都不是 1 - baz
- 也不是情况 2 - qux
- 匹配任何内容(即匹配 null
)。仅使用 jq 1.6 有没有一种简单的方法可以做到这一点?
更新:
以下是实际 JSON 文件的片段:
/* manifest.json, variant A */
{
"browser_specific_settings": {
"gecko": {
"id": "{95ad7b39-5d3e-1029-7285-9455bcf665c0}",
"strict_min_version": "68.0"
}
}
}
/* manifest.json, variant B */
{
"applications": {
"gecko": {
"id": "j30D-3YFPUvj9u9izFoPSjlNYZfF22xS@foobar",
"strict_min_version": "53.0"
}
}
}
我需要
id
值(*gecko.id 可以这么说)或 error
如果没有:{95ad7b39-5d3e-1029-7285-9455bcf665c0}
j30D-3YFPUvj9u9izFoPSjlNYZfF22xS@foobar
error
最佳答案
您可以使用如下过滤器,它可以与您提供的示例 JSON 内容一起使用
jq '.. | if type == "object" and has("id") then .id else empty end'
现场观看 jqplay - VariantA和 jqplay - VariantB
备注 : 这只会得到
.id
的值当它存在时,请参阅其他答案( oguz ismail's )以显示 error
当对象不包含必填字段时。
关于json - "Ternary logic"返回值 : foo, bar 或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57571424/