如何使用jq将JSON数组映射为CSV字段表头并导出目标格式数据
用jq实现JSON转指定结构CSV的方法
你可以直接使用以下jq命令完成转换,假设你的JSON数据保存在input.json文件中:
jq -s ' # 计算所有记录中identifier数组的最大长度,确定需要展开的列数 def max_iden_len: map(.identifier | length) | max; # 固定字段表头 def fixed_head: ["id", "meta_versionId", "meta_lastUpdated", "address"]; # 生成动态的identifier字段表头 def iden_head($len): range($len) | ["identifier\(.)_system", "identifier\(.)_value"] | flatten; # 单条记录转CSV行逻辑 def to_line($max_len): [ .id, .meta.versionId, .meta.lastUpdated, (.address | join("|")), (range($max_len) as $idx | .identifier[$idx] | [.system // "", .value // ""]) ] | flatten; # 主执行逻辑 max_iden_len as $max_len | (fixed_head + iden_head($max_len)), (.[] | to_line($max_len)) # 所有字段加双引号,用逗号拼接为CSV行 | map("\"\(.)\"") | join(",") ' input.json > output.csv
命令说明
- 用
-s参数将所有输入的JSON对象读取为一个数组,先全局计算最长的identifier数组长度,保证能覆盖所有需要展开的列 address字段直接用join("|")完成数组元素拼接,符合要求- 对于
identifier数组,按索引遍历到最大长度,无对应值的位置返回空字符串,保证列对齐 - 最终输出的每个字段都包裹双引号,完全匹配要求的CSV格式
执行完上述命令后,输出的output.csv就和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

