如何使用jq显示多个字段值

时间:2020-09-30 15:58:16

标签: json jq

我有这个JSON:

{
  "connections": [
    {
      "resourceName": "user_1",
      "etag": "etag_value_1",
      "emailAddresses": [
        {
          "metadata": {
            "primary": true,
            "source": {
              "type": "CONTACT",
              "id": "id_1"
            }
          },
          "value": "email_1",
          "type": "home"
        }
      ]
    },
    {
      "resourceName": "user_2",
      "etag": "etag_value_2",
      "emailAddresses": [
        {
          "metadata": {
            "primary": true,
            "source": {
              "type": "CONTACT",
              "id": "id_2"
            }
          },
          "value": "email_2",
          "type": "home"
        }
      ]
    }
  ]
}

我想显示如下内容:

{
  "resourceName": "user_1",
  "etag": "etag_value_1",
  "value": "email_1"
}

我正在玩类似的游戏,但是不起作用:

jq '.connections[].emailAddresses[] | {.resourceName, .etag, .value}' test.json

我该如何使用JQ二进制文件?

1 个答案:

答案 0 :(得分:1)

您的路径表达式错误,resourceNameetag字段出现在connections数组内部的顶级路径中,而value字段位于{ {1}}数组。

由于要形成对象,请将字段包裹在emailAddresses

{..}

如果仅在寻找第一个对象,请对所有对象执行.connections[] | { resourceName, etag } + ( .emailAddresses[] | { value } ) 或如上。