dab*_*l0r 3 json batch-processing jq
我有两种不同的 JSON 结构可以从中检索特定的对象值,基本上是这样的
{
"one": {
"foo": {
"bar": "baz"
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个这样的
{
"two": {
"foo": {
"bar": "qux"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想bar在两种情况下都返回值加上一个额外的返回变量error,以防 case 1 baz- 也没有 case 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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要id值(*gecko.id 可以这么说)或者error如果没有:
{95ad7b39-5d3e-1029-7285-9455bcf665c0}
j30D-3YFPUvj9u9izFoPSjlNYZfF22xS@foobar
error
Run Code Online (Sandbox Code Playgroud)
您可以使用下面的过滤器,它可以与您提供的示例 JSON 内容一起使用
jq '.. | if type == "object" and has("id") then .id else empty end'
Run Code Online (Sandbox Code Playgroud)
现场观看 jqplay - VariantA和jqplay - VariantB
注意:这仅获取.id存在时的值,请参阅其他答案(oguz ismail 的)以error在对象不包含必填字段时显示。
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |