You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JQ筛选数组中含fanart的首个URL并输出TSV

问题:从JSON提取指定字段生成TSV格式内容

输入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格式内容,每行包含两个字段:
    1. Metadata中的Key字段值
    2. 对应Image数组中第一个url包含"fanart"字符串的地址

预期输出

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. 字段名错误:JSON中目标字段是Key,代码里误写为.ratingKey
  2. 筛选逻辑错误:IN($items[])的用法不符合需求,应该用contains("fanart")直接检查url是否包含指定字符串
  3. 未处理"取第一个匹配项"的需求:原代码没有限制只输出第一个符合条件的url

正确命令:

jq -r '.MediaContainer.Metadata[] | [.Key, first(.Image[] | select(.url | contains("fanart")) | .url)] | @tsv' trending.json

命令解释:

  • .MediaContainer.Metadata[]:遍历所有Metadata条目
  • .Key:提取当前条目的Key值
  • first(.Image[] | select(.url | contains("fanart")) | .url):
    • 遍历当前条目的Image数组
    • 筛选出url包含"fanart"的项
    • 提取这些项的url并取第一个结果
  • [...]:将Key和筛选后的url组合成数组
  • @tsv:将数组转换为TSV格式输出

内容的提问来源于stack exchange,提问作者Mike Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:36