1

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

4

1 回答 1

1

你可以使用这个过滤器:

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

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

您可能希望获得原始输出,所以不要忘记-r标志。

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

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

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

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

.id as $id | .files[] | "\(.name) \($id) \(.size)"
于 2015-03-13T14:25:16.860 回答