当我运行以下命令时:
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章节?,如何添加章节标记?,何时更新更改?,如何禁用章节?,章节在我的国家可用吗?“}
1条答案
按热度按时间oyxsuwqo1#
如果
.chapters
不存在,则计算结果为null
,.chapters[]
将失败并返回错误Cannot iterate over null (null)
。根据您想要的结果值,您可以将关键部分放在括号中,使用错误抑制运算符
?
来消 debugging 误,并使用替代运算符//
提供替代运算符,例如。(…)? // null
。注意:即使有章节,
.chapters[] | {title} | has("title") | join(", ")
也没有意义,因为has
返回布尔值。是否要将用逗号分隔的章节标题连接成一个长字符串?使用.chapters | map(.title?) | join(", ")
代替。