返回
JQ中如何保留匹配记录之间的逗号分隔
windows
2024-06-12 17:05:24
如何在 JQ 中保留匹配记录之间的逗号分隔
问题
在使用 JQ 命令行 JSON 处理器处理 JSON 文件时,你可能会遇到以下问题:当检索特定位置的匹配项时,输出的 JSON 对象会丢失逗号分隔符。
解决方案
为了保留匹配记录之间的逗号分隔,你需要使用 JQ 的 reduce
函数。该函数将数组中的每个元素作为参数,并使用指定的操作对其进行累积。
修改后的 JQ 命令
输出带有逗号分隔符的 JSON 对象:
jq ".[] | reduce .[] as $item ([]; . + $item + ",") | del(.[-1:])" sample.json
输出带有逗号分隔符的 JSON 数组:
jq ".[] | reduce .[] as $item ([][]; . + [$item]) | del(.[-1:])" sample.json
详细说明
reduce
函数使用逗号分隔符累积匹配的 JSON 对象或数组元素。del(.[-1:])
函数删除逗号分隔符,保留最后一个元素。
示例
考虑以下示例 JSON 文件:
[
{
"name": "Bob",
"location": "New York"
},
{
"name": "Adam",
"location": "Los Angeles"
},
{
"name": "Jill",
"location": "Chicago"
}
]
输出带有逗号分隔符的 JSON 对象:
{
"name": "Bob",
"location": "New York"
},{
"name": "Adam",
"location": "Los Angeles"
}
输出带有逗号分隔符的 JSON 数组:
[
{
"name": "Bob",
"location": "New York"
},
{
"name": "Adam",
"location": "Los Angeles"
}
]
常见问题解答
问:为什么需要使用 reduce
函数?
答: reduce
函数允许你累积匹配的 JSON 对象或数组元素,并使用逗号分隔符将它们组合在一起。
问:为什么需要使用 del(.[-1:])
函数?
答: del(.[-1:])
函数删除最后的逗号分隔符,使输出更具可读性。
问:我可以使用 reduce
函数执行哪些其他操作?
答: reduce
函数是一个强大的函数,可以执行各种操作,例如求和、连接和筛选。
问:如何自定义逗号分隔符?
答: 你可以使用 + ;
运算符来定义自定义的分隔符。例如,要使用分号作为分隔符,可以使用以下命令:
jq ".[] | reduce .[] as $item ([]; . + $item + ";")" sample.json
结论
通过使用 reduce
函数,你可以轻松地在 JQ 输出中保留匹配记录之间的逗号分隔。这使得在命令行中显示结果或将其输出到新文件时更加灵活。