通过嵌套字段的值选择对象并提取第一级字段

时间:2020-03-16 10:03:12

标签: json jq

我有以下json:

[
  {
    "uuid": "rvbrc7y6a5d6xpz37av534zv3a",
    "templateUuid": "101",
    "trashed": "N",
    "createdAt": "2018-07-26T05:48:51Z",
    "updatedAt": "2018-07-27T00:26:35Z",
    "changerUuid": "Y7WX2RXJ35GCLLERQA2T74CKNM",
    "itemVersion": 3,
    "vaultUuid": "awn3jry3oo55xdcfgs7bnlyioa",
    "overview": {
      "ps": 0,
      "title": "Env Vars - CSP 1"
    }
  },
  {
    "uuid": "xtf3vdsnw5ardldytwh6edihzu",
    "templateUuid": "001",
    "trashed": "N",
    "createdAt": "2013-10-15T01:29:57Z",
    "updatedAt": "2016-11-22T20:57:47Z",
    "changerUuid": "Y7WX2RXJ35GCLLERQA2T74CKNM",
    "itemVersion": 1,
    "vaultUuid": "qmorozyspqhb26kr4z7nbt7hpy",
    "overview": {
      "URLs": [
        {
          "u": "https://example.com"
        }
      ],
      "ainfo": "*******@gmail.com",
      "ps": 72,
      "title": "https://example.com",
      "url": "https://example.com"
    }
  }
]

数组中还有另外500个对象需要解析。三个对象的.overview.title包含字符串“ Env Vars”。

我正在尝试使用jq来使输出看起来像这样:

"rvbrc7y6a5d6xpz37av534zv3a", "Env Vars - CSP 1"
"another uuid", "Env Vars - CSP 2"
"yet another uuid", "Env vars - CSP n"

我尝试了一些不同的事情,包括:

  • cat list.json | jq -c '.[] | .uuid, .overview.title'

  • cat list.json | jq -c '.[].overview.title | select(contains("Env Var"))'

以及上述内容的许多不同变体。 这是我第一次在生气中使用jq,所以对我来说这是很新的。 jq doco并不是很有帮助。

请给我一个线索。

1 个答案:

答案 0 :(得分:1)

选择.overview.title包含Env Vars的对象,从中提取.uuid,制作UUID和标题对的数组,然后将其馈送到@csv过滤器。

.[]
| .overview.title as $t 
| select($t | index("Env Vars")) 
| [.uuid, $t]
| @csv

请注意,您需要在命令行上为jq指定-r / --raw-output标志,以产生有效的CSV。