PySpark中展开无数组结构体,生成tagname/key/value列的实现方法
如何将嵌套JSON转换为三列CSV格式
你可以通过以下两种常用方式实现需求,支持任意数量的外层标签和内层字段:
方法一:Python 脚本实现
利用Python标准库的json和csv模块,直接遍历JSON结构并生成目标格式:
import json import csv # 替换为你的JSON数据或读取文件路径 json_content = ''' { "labels1": {"A":1,"B":2, "C":3}, "labels2": {"A":1,"B":2, "C":3} } ''' # 解析JSON数据 data = json.loads(json_content) # 生成CSV文件 with open('result.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 写入表头 writer.writerow(['tagname', 'key', 'value']) # 遍历外层标签和内层键值对 for tagname, inner_data in data.items(): for key, value in inner_data.items(): writer.writerow([tagname, key, value])
执行后会生成result.csv,完全符合你需要的输出格式,无论内层有多少个字段都会自动遍历处理。
方法二:命令行工具 jq 实现
如果你习惯用命令行处理数据,jq是高效的选择,无需编写脚本:
假设你的JSON数据保存在input.json文件中,执行以下命令:
jq -r '["tagname","key","value"], to_entries[] | .key as $tag | .value | to_entries[] | [$tag, .key, .value] | @csv' input.json > output.csv
命令解释:
["tagname","key","value"]:构造CSV表头to_entries[]:将外层JSON对象转换为键值条目(格式为{"key":"labels1", "value": {...}}).key as $tag:把外层键存入变量$tag作为tagname.value | to_entries[]:将内层JSON对象也转换为键值条目[$tag, .key, .value]:组合成目标数组@csv:将数组转换为CSV格式,-r参数输出原始字符串(不带多余引号)
执行后会生成output.csv,效果和Python脚本一致。
内容的提问来源于stack exchange,提问作者Amaravathi Satya
相关产品推荐
相关产品推荐

