Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从jq中json文件中的多个标记创建字符串_Json_Jq - Fatal编程技术网

从jq中json文件中的多个标记创建字符串

从jq中json文件中的多个标记创建字符串,json,jq,Json,Jq,我试图从json中的键获取多个值。我已经完成了第一部分,但是第二部分没有给我想要的 以下是一段视频中json格式的数据片段: 所以我想先获取视频信息,然后是音频信息: 预期结果: "1080,h264,aac" 下面是我正在尝试的代码,它给了我一个空白输出: .streams[] | "\(select(.codec_type=="video") | "\(.height),\(.codec_name)"),\(select(.codec_type=="audio") | "\(.codec

我试图从json中的键获取多个值。我已经完成了第一部分,但是第二部分没有给我想要的

以下是一段视频中json格式的数据片段:

所以我想先获取视频信息,然后是音频信息:

预期结果:

"1080,h264,aac"
下面是我正在尝试的代码,它给了我一个空白输出:

.streams[] | "\(select(.codec_type=="video") | "\(.height),\(.codec_name)"),\(select(.codec_type=="audio") | "\(.codec_name)")"
但是,当引用单个数组时,它可以工作:

.streams[] | "\(select(.codec_type=="video") | "\(.height),\(.codec_name)"),"
"1080,h264,"
我想要音频和视频信息


以下内容似乎正是您想要的:

.streams
| (.[] | select(.codec_type == "video") | "\(.height),\(.codec_name),")
+ (.[] | select(.codec_type == "audio") | "\(.codec_name)") 

它确实会产生所需的输出,并且与问题描述和示例代码匹配,但如果(例如)有多个视频对象或没有音频对象,结果可能与您想要的不完全一致。

作为替代方法,可以使用基于漫游路径的unix实用程序选择所需的记录:

bash $ <video.json jtc -w'[codec_type]:<video>[-1][height]<H>v[-1][codec_name]<C>v[-2][codec_type]:<audio>[-1][codec_name]' -T'"{H},{C},{}"'
"1080,h264,aac"
bash $ 

bash$Disclosure:我是jtc
JSON操作的shell cli工具的创建者。我甚至不知道有这么一个。不幸的是,我所使用的系统带有一个预设的工具,而jq就是其中之一,除非开发人员实现它,否则就没有扩展的空间。是的,
jtc
相对较新(第一次出版不到一年)
jtc
是以一种非常惯用的可移植方式编写的,在任何系统上编译它都应该没有问题,只要它有c++14或更高版本的编译器。我最终将输出保存为变量,并每次单独访问它。
bash $ <video.json jtc -w'[codec_type]:<video>[-1][height]<H>v[-1][codec_name]<C>v[-2][codec_type]:<audio>[-1][codec_name]' -T'"{H},{C},{}"'
"1080,h264,aac"
bash $