代码之家  ›  专栏  ›  技术社区  ›  Mike Davis

使用JQ选择数组中具有匹配项的第一个项目

  •  0
  • Mike Davis  · 技术社区  · 1 年前

    我有以下JSON格式:

        "MediaContainer": {
            "Metadata": [
                {
                    "Key": "5d77682c151a60001f24bbe8",
                    "Image": [
                        {
                            "alt": "image",
                            "type": "background",
                            "url": "https://image.tmdb.org/t/p/original/f8Q3Sug5Sa42psw2b3Gdd1aT8t.jpg"
                        },
                        {
                            "alt": "image",
                            "type": "clearLogoWide",
                            "url": "http://assets.fanart.tv/fanart/movies/2639/hdmovielogo/deconstructing-harry-60f13837ee6aa.png"
                        },
                        {
                            "alt": "image",
                            "type": "coverArt",
                            "url": "https://metadata-static.imdb.com/4/gracenote/44a1852151a726d730c214b97986c27e.jpg"
                        },
                        {
                            "alt": "image",
                            "type": "coverPoster",
                            "url": "https://image.tmdb.org/t/p/original/i7Z5DdznqANJUjqWISEFu9bw6J7.jpg"
                        },
                        {
                            "alt": "image",
                            "type": "coverSquare",
                            "url": "https://metadata-static.imdb.com/c/gracenote/c8c351b348baf43a909e4a3b1c60a443.jpg"
                        },
                        {
                            "alt": "image",
                            "type": "snapshot",
                            "url": "https://metadata-static.imdb.com/a/gracenote/ab5a905958de8d43c763d74153242690.jpg"
                        }
                    ],
                },
    
    

    我试图输出TSV,其中每一行都包含“Key”和包含字符串“fanart”的“Image”数组中的第一个“url”值。例如,对于上面的JSON,我要寻找的输出是:

    5d77682c151a60001f24bbe8 http://assets.fanart.tv/fanart/movies/2639/hdmovielogo/deconstructing-harry-60f13837ee6aa.png
    

    以下是我失败的尝试,它只会抛出编译错误:

    jq -r '.MediaContainer.Metadata[] | [.ratingKey,.Image[] | select( .url as $items | "fanart" | IN($items[]) )] | @tsv' 'trending.json'

    1 回复  |  直到 1 年前
        1
  •  0
  •   peak    1 年前

    你非常接近。这里我们使用 first 以获得满足条件的第一url,假设存在至少一个:

    .MediaContainer.Metadata[]
    | [.Key, first(.Image[].url | select(test("fanart") ) ) ]
    | @tsv
    

    如果no.url满足选择标准,以上内容可能仍然可以接受,但如果不满足,添加调整应该很容易。

    推荐文章