json - "Ternary logic"返回值 : foo, bar 或错误

标签 json batch-processing jq

我有两种不同的 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 - VariantAjqplay - VariantB

备注 : 这只会得到 .id 的值当它存在时,请参阅其他答案( oguz ismail's )以显示 error当对象不包含必填字段时。

关于json - "Ternary logic"返回值 : foo, bar 或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57571424/

相关文章:

json - 类型 'List<dynamic>' 不是类型 'List<int>' 的子类型,其中

sql - 数据库批量更新

image - 使用 ImageMagick 将不同的图像格式批量转换/调整大小为特定分辨率的 JPEG

json - 如何从 JSON 字符串中删除子字符串

java - 无法写入 JSON : Unable to access lob stream

json - Microsoft Graph 上的 AAD 应用程序注册

http - 哪个 HTTP 状态代码表示 "Not Ready Yet, Try Again Later"?

JQ:如何按值拆分数组并找出每个部分的长度?

json - JQ根据键组合json映射数组

jquery - ajax请求的json不填充流程图