如何从包含JSON列的CSV文件中提取指定数据?
提取CSV中JSON字段的指定子对象键并输出为CSV
方法1:直接用jq处理(简单场景,name字段无逗号)
如果你的CSV每行仅含两个字段,且第一个字段(名称)不含逗号,可直接用jq完成拆分与解析:
jq -Rr 'split(",", 1) as [$name, $json] | "\($name),", ($json | fromjson | .field2.subfield.subfield2 | keys | join(" "))' input.csv
命令说明:
-R:将输入视为原始字符串(而非JSON格式)-r:输出原始文本,避免自动添加引号split(",", 1):按第一个逗号拆分字符串,分离出名称和JSON内容fromjson:将JSON字符串解析为可操作的JSON对象.field2.subfield.subfield2 | keys:提取subfield2下的所有键名join(" "):把键名用空格拼接成单个字符串- 最后通过字符串拼接输出你需要的换行格式
方法2:用csvkit+jq(通用场景,支持含逗号的name字段)
如果name字段可能包含逗号,需要用专业CSV解析器csvkit确保字段拆分正确:
- 先安装csvkit:
pip install csvkit - 执行以下命令:
csvjson --columns name,json input.csv | jq -r '.[] | "\(.name),", (.json | fromjson | .field2.subfield.subfield2 | keys | join(" "))'
命令说明:
csvjson --columns name,json:将CSV转换为JSON数组,指定两列的键名为name和json,确保复杂字段正确解析- jq部分逻辑与方法1一致,从标准化的JSON对象中提取目标键名
输出结果
针对你提供的输入,两种方法都会输出:
name, active passive running
内容的提问来源于stack exchange,提问作者null_nerd
相关产品推荐
相关产品推荐

