我有这样的JSON:
{
"files": [
{ "size": 3227238, "name": "file1.mp3" },
{ "size": 3737995, "name": "file2.mp3" }
],
"id": "music"
}
我想在自己的行上打印每个文件,但包括外部元素的id。
file1.mp3 music
file2.mp3 music
我可以获得这样的文件属性:
jq -r '.files | .[] | .name'
但是如何在每行中包含id?
答案 0 :(得分:1)
您可以使用此过滤器:
"\(.files[].name) \(.id)"
这将为包含名称和外部id的每个文件生成一个字符串。
您可能希望获得原始输出,因此请勿忘记-r
标记。
如果您想从每个文件中提取多个名称,则需要对过滤器进行调整。关键是最多使用.[]
,一次在过滤器的任何一个部分内。根据您希望字符串中每个部分的位置,您可以采取多种方法。
如果它们全部在字符串的一部分中,您只需添加另一个字符串,组合您想要的属性:
"\(.files[] | "\(.name) \(.size)") \(.id)"
否则,引入变量会更容易:
.id as $id | .files[] | "\(.name) \($id) \(.size)"