使用JQ仅转换JSON对象中的details子数组
JQ 查询解决方案
核心查询语句
针对你的需求,保留外层结构并处理details数组的JQ语句如下:
.details |= map(select(.detail | test("^\\s*$") | not) | .detail)
语句解释
.details |= ...:仅修改JSON中的details字段,其余键值对保持原样map(...):遍历details数组的每一个元素select(.detail | test("^\\s*$") | not):筛选出detail值不是纯空白字符(包括空格、制表符、换行符等)的数组元素;如果只需要过滤单个空格,可替换为select(.detail != " ")| .detail:从筛选后的元素中提取detail字段的值,组成新的数组
示例验证
假设原始JSON输入为:
{ "extraField": "保留的内容", "details": [ {"detail": " "}, {"detail": "第一条有效内容"}, {"detail": "\t\n"}, {"detail": "第二条有效内容"} ] }
执行上述JQ语句后,输出结果为:
{ "extraField": "保留的内容", "details": [ "第一条有效内容", "第二条有效内容" ] }
命令行使用方式
将查询语句直接传入jq命令:
jq '.details |= map(select(.detail | test("^\\s*$") | not) | .detail)' your_input.json
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

