如何在内部的每一行上打印外部JSON属性?

时间:2015-03-13 14:15:26

标签: json jq

我有这样的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?

1 个答案:

答案 0 :(得分:1)

您可以使用此过滤器:

"\(.files[].name) \(.id)"

这将为包含名称和外部id的每个文件生成一个字符串。

您可能希望获得原始输出,因此请勿忘记-r标记。

如果您想从每个文件中提取多个名称,则需要对过滤器进行调整。关键是最多使用.[],一次在过滤器的任何一个部分内。根据您希望字符串中每个部分的位置,您可以采取多种方法。

如果它们全部在字符串的一部分中,您只需添加另一个字符串,组合您想要的属性:

"\(.files[] | "\(.name) \(.size)") \(.id)"

否则,引入变量会更容易:

.id as $id | .files[] | "\(.name) \($id) \(.size)"