如何用JQ统计嵌套数组元素数量并导出为CSV
问题需求
现有嵌套数组结构的JSON数据,需要导出为统计嵌套数组元素数量的CSV格式,当前使用的JQ语句会为每个嵌套元素生成多行,不符合需求。
现有JSON数据
[ { "value1": "Data1-0", "value2": "Data2-0", "nArray": [ {"nValue1": "nData1-0a","nValue2": "nData2-0a"}, {"nValue1": "nData1-0b","nValue2": "nData2-0a"}, {"nValue1": "nData1-0c","nValue2": "nData2-0a"} ], "value3": "Data3-0" }, { "value1": "Data1-1", "value2": "Data2-1", "nArray": [ {"nValue1": "nData1-1a","nValue2": "nData2-1a"}, {"nValue1": "nData1-1b","nValue2": "nData2-1a"} ], "value3": "Data3-1" } ]
期望的CSV格式
Value1,Value2,Value3,nArrayCount Data1-0,Data2-0,Data3-0,3 Data1-1,Data2-1,Data3-1,2
当前JQ语句的问题
当前使用的JQ语句:
[.[] | [.value1,.value2,.value3] + (.nArray[]? | [.nValue1]) ] | .[] | @csv
会遍历nArray的每个元素并生成多行数据,而我们只需要统计nArray的元素总数,不需要展开嵌套内容。
正确的JQ解决方案
使用JQ的length函数直接获取数组长度,配合@csv生成目标格式:
完整命令
["Value1", "Value2", "Value3", "nArrayCount"], (.[] | [.value1, .value2, .value3, (.nArray | length)]) | @csv
说明
(.nArray | length):直接计算nArray数组的元素数量,避免遍历数组内的每个元素- 先构造表头数组,再处理每个JSON对象生成对应的数据行,最后统一用
@csv转换为CSV格式
执行该命令后,输出结果完全匹配期望的CSV格式。
内容的提问来源于stack exchange,提问作者CD007
相关产品推荐
相关产品推荐

