首页 > 解决方案 > 如何使用jq在`@name`为`dbUrl`的json数组中获取`@value`的值?

问题描述

以下test.json文件是从带有xq的 xml 文件转换而来的:

{
  "project": {
    "@basedir": ".",
    "property": [
      {
        "@environment": "env"
      },
      {
        "@name": "foo",
        "@value": "bar"
      },
      {
        "@name": "aaa",
        "@value": "bbb"
      },
      {
        "@name": "dbUrl",
        "@value": "123.123.123.123"
      }
    ]
  }
}

我怎样才能123.123.123.123使用dbUrljq ?

请不要告诉我用来jq '.project.property[3]["@value"]' test.json获取123.123.123.123

因为{"@name": "dbUrl", "@value": "123.123.123.123"}不保证会出现在 的第 4 位property

例如:

{
  "project": {
    "@basedir": ".",
    "property": [
      {
        "@environment": "env"
      },
      {
        "@name": "foo",
        "@value": "bar"
      },
      {
        "@name": "dbUrl",
        "@value": "123.123.123.123"
      },
      {
        "@name": "aaa",
        "@value": "bbb"
      }
    ]
  }
}

在这种情况下,jq '.project.property[3]["@value"]' test.json不返回123.123.123.123. 它返回bbb

标签: jsonjq

解决方案


您不需要查看特定索引,只需使用select()表达式为您执行此操作,它将返回@name包含dbUrl并返回其@value

jq --raw-output '.project.property[] | select(."@name"=="dbUrl") | ."@value"'

由于这些字段存在特殊字符@name,因此您需要在引号内访问它们。@value@

jqplay - 网址


推荐阅读