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

How to print outer JSON attribute on each line with the inner ones?

我有 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?

您可以使用此过滤器:

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

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

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

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

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

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

要不然引入一个变量就更简单了:

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