JQ新手麻烦选择嵌套键

时间:2018-07-28 00:12:08

标签: json nested key jq

嗨,我是JQ和Json的新手。我正在使用

$ jq --version jq-1.5

我想了解如何选择id,attributes.name,attributes.albumName和attributes.artistName的值很麻烦

我正在Mac上使用终端应用程序。我遇到了某种奇怪的解析问题

$ jq '.results.songs.data[0] | {id, attributes.name } ' t
jq: error: syntax error, unexpected FIELD, expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.results.songs.data[0] | {id, attributes.name }                                         
jq: 1 compile error
$ 

此示例显示了我要过滤的数据结构,

    $ jq '.results.songs.data[0] | {id, attributes } ' t
{
  "id": "152471393",
  "attributes": {
    "previews": [
      {
        "url": "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/AudioPreview71/v4/7d/c5/68/7dc56849-29b8-bd90-2bb1-51750e479569/mzaf_4742389090778091050.plus.aac.p.m4a"
      }
    ],
    "artwork": {
      "width": 1449,
      "height": 1449,
      "url": "https://is5-ssl.mzstatic.com/image/thumb/Music/v4/7d/01/56/7d0156be-12cd-8724-a0ca-727b1013a81d/source/{w}x{h}bb.jpeg",
      "bgColor": "ddcfc4",
      "textColor1": "010100",
      "textColor2": "422f10",
      "textColor3": "2d2a27",
      "textColor4": "614f34"
    },
    "artistName": "Gnarls Barkley",
    "url": "https://itunes.apple.com/us/album/crazy/152471339?i=152471393",
    "discNumber": 1,
    "genreNames": [
      "Alternative",
      "Music",
      "R&B/Soul",
      "Rock",
      "Soul",
      "Hip-Hop/Rap",
      "Rap",
      "Hip-Hop",
      "Adult Alternative",
      "Neo-Soul",
      "Alternative Rap",
      "Underground Rap"
    ],
    "durationInMillis": 178387,
    "releaseDate": "2006-03-13",
    "name": "Crazy",
    "isrc": "USAT20611041",
    "albumName": "St. Elsewhere",
    "playParams": {
      "id": "152471393",
      "kind": "song"
    },
    "trackNumber": 2
  }
}

谢谢

安迪

1 个答案:

答案 0 :(得分:2)

使用示例JSON作为输入,进行以下调用:

jq '{id, name: .attributes.name }' input.json

产生:

{
  "id": "152471393",
  "name": "Crazy"
}

上面的过滤器是以下简称:

{"id" : .id, "name": .attributes.name }

在任何情况下,都必须正确指定密钥。

供将来参考,在stackoverflow.com上提问时,请尽可能遵守http://stackoverflow.com/help/mcve准则。