jq如何提取字段只有当存在的yt-dlp json转储

toe95027  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(119)

当我运行以下命令时:
yt-dlp --dump-json https://www.youtube.com/watch?v=nochapters| jq -cr '{日期:.upload_date|(.[0:4] +“-”+ .[4:6] +“-”+ .[6:8]),ID:.id,标题:.fulltitle,Chaps:.章节[]|{标题}| public void run(“,“)
它给了我一个错误:
jq:error(at:1):无法覆盖null(null)
如何从那些真正有章节的视频中提取章节?(因为我认为它会卡住时,没有章节被发现)。
编辑:
输入是这样的(在这个例子中存在章节):
{“id”:“pvkTC2xIbeY”,“title”:“如何将章节添加到YouTube视频|章节解释”、“格式”:[ {“format_id”:“sb2”,“format_note”:“storyboard”,.“comment_count”:2600,“章”:[ {“start_time”:0,“title”:“Intro”,“end_time”:10 },{“start_time”:10、“标题”:“YouTube章节”,“end_time”:45 },.
输出如下:
{“日期”:“2020-06-17”,“ID”:“pvkTC 2xIbeY”,“标题”:“如何为YouTube视频添加章节|Chapters Explained”,“Chaps”:“简介,YouTube章节,什么是YouTube章节?,如何添加章节标记?,何时更新更改?,如何禁用章节?,章节在我的国家可用吗?“}

oyxsuwqo

oyxsuwqo1#

如果.chapters不存在,则计算结果为null.chapters[]将失败并返回错误Cannot iterate over null (null)
根据您想要的结果值,您可以将关键部分放在括号中,使用错误抑制运算符?来消 debugging 误,并使用替代运算符//提供替代运算符,例如。(…)? // null
注意:即使有章节,.chapters[] | {title} | has("title") | join(", ")也没有意义,因为has返回布尔值。是否要将用逗号分隔的章节标题连接成一个长字符串?使用.chapters | map(.title?) | join(", ")代替。

jq -c '{
  Date: .upload_date | (.[0:4] + "-" + .[4:6] + "-" + .[6:8]),
  ID: .id,
  Title: .fulltitle,
  Chaps: ((.chapters | map(.title) | join(", "))? // null)
}'

相关问题