您好,我有以下json,并try 获得所有的父母谁拥有"linux-Image-amd64"

{
    "web-prode-01.example.de": "ERROR: Problem encountered installing package(s). Additional info follows:\n\nchanges:\n    ----------\n    linux-image-amd64:\n        ----------\n        new:\n        old:\n            6.1.55-1\nerrors:\n    - Running scope as unit: run-rad31bddd35ec452b9d67fef004ce3daf.scope\n      E: Sub-process /usr/bin/dpkg returned an error code (1)",
    "web-prode-04.example.de": {
        "linux-image-amd64": {
            "old": "5.10.197-1",
            "new": "5.10.205-2"
        },
        "linux-image-5.10.0-27-amd64": {
            "old": "",
            "new": "5.10.205-2"
        }
    },
    "lmrelaunch.example.de": {
        "linux-image-6.1.0-0.deb11.13-amd64": {
            "old": "",
            "new": "6.1.55-1~bpo11+1"
        },
        "linux-image-amd64": {
            "old": "6.1.38-4~bpo11+1",
            "new": "6.1.55-1~bpo11+1"
        }
    }   
}

我试了jq -r 'keys[] as $k | "\($k) \(.[$k]."linux-image-amd64")"'次,但只收到一条,而不是两条

推荐答案

你应该判断上下文是否has那个键.此外,为了防止字符串在try 对其应用has时失败,请过滤objects或使用? suppress 错误.在任何一种情况下,使用此条件使用select过滤结果.

keys[] as $k | .[$k] | objects | select(has("linux-image-amd64"))
# or
keys[] as $k | .[$k] | select(has("linux-image-amd64")?)
{
  "linux-image-6.1.0-0.deb11.13-amd64": {
    "old": "",
    "new": "6.1.55-1~bpo11+1"
  },
  "linux-image-amd64": {
    "old": "6.1.38-4~bpo11+1",
    "new": "6.1.55-1~bpo11+1"
  }
}
{
  "linux-image-amd64": {
    "old": "5.10.197-1",
    "new": "5.10.205-2"
  },
  "linux-image-5.10.0-27-amd64": {
    "old": "",
    "new": "5.10.205-2"
  }
}

然后,您可以使用$k构建输出,例如:

keys[] as $k | .[$k] | select(has("linux-image-amd64")?) | $k
lmrelaunch.example.de
web-prode-04.example.de

Json相关问答推荐

我可以使用JQ来缩小数组中的json对象的范围吗?

如何使用PlayWriter循环访问JSON对象

解析SQL中的嵌套JSON

JOLT分裂和数组数据

匹配来自不同数组的值

将环境变量值从 yaml 传递到 json

如何通过 jolt 将一个对象中的键和值添加到数组中的每个对象中

JSONPath:查找子项目条件在字符串列表中的项目

无法在Kotlin 中解析JSONObject

如何实现一个通用的 serde_json::from_str

传统编程语言等价于动态 SQL

使用 json_query 过滤嵌套列表中的元素

使用 jq 同时迭代数组

为什么在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文

Laravel5 Json 获取文件内容

从 HttpResponse 获取 json

在 JSON.stringify() 的输出中隐藏空值

jQuery JSON 响应总是触发 ParseError

如何在 JAVA 中对 JSONArray 进行排序

我如何反序列化以杰克逊为单位的时间戳?