如何用单条jq命令高效将嵌套JSON转换为指定格式CSV
用单条jq命令实现嵌套JSON到指定CSV的转换
核心思路
通过jq的数组展开与变量绑定,将每个导演与其名下的每部电影逐一配对,直接格式化成分号分隔且行尾带分号的输出,全程在jq内部完成,无需外部循环,保证大数据量下的性能。
示例输入JSON
[ { "regisseur": "Christopher Nolan", "movies": ["Inception", "Interstellar", "Dunkirk"] }, { "regisseur": "Quentin Tarantino", "movies": ["Pulp Fiction", "Kill Bill", "Django Unchained"] } ]
最终jq命令
jq -r '.[] | .regisseur as $dir | .movies[] | "\($dir);\(.);"' input.json
命令拆解
.[]:展开顶层的导演对象数组,逐个处理每个导演条目.regisseur as $dir:将当前导演的名字存入变量$dir,避免重复读取.movies[]:展开当前导演的电影列表,遍历每一部电影"\($dir);\(.);":拼接字符串,按「导演名;电影名;」的格式输出每一行
输出效果
Christopher Nolan;Inception; Christopher Nolan;Interstellar; Christopher Nolan;Dunkirk; Quentin Tarantino;Pulp Fiction; Quentin Tarantino;Kill Bill; Quentin Tarantino;Django Unchained;
特殊场景处理(含特殊字符的字段)
如果导演名或电影名包含分号、引号等特殊字符,可借助@csv过滤器自动处理转义与引号包裹,调整后的命令如下:
jq -r '.[] | .regisseur as $dir | .movies[] | "\($dir | @csv);\(. | @csv);"' input.json
内容的提问来源于stack exchange,提问作者Rubberduck
相关产品推荐
相关产品推荐

