如何用内部属性在每一行上打印外部 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)"
我有 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)"