使用JQ解析JSON输出CSV 提取tags中Gamma值不存在则返回NULL
JSON提取指定字段生成CSV实现方案
需求说明
从输入的JSON数组中提取字段生成CSV,规则为:若tags映射中存在键Gamma则返回对应值,不存在则输出NULL,输出字段顺序为generated_time、platform、id、Gamma值、created。
方案1:使用jq命令行工具实现
适用于快速处理的场景,执行命令如下:
# 假设输入文件名为input.json jq -r ' "generated_time,platform,id,,", .[1:] | .[] | [ .generated_time, .platform, .id, (.tags.Gamma // "NULL"), .created ] | @csv ' input.json | sed 's/"//g'
逻辑说明:
- 先输出匹配要求的表头
- 跳过JSON数组第一个表头定义元素,遍历后续业务数据
(.tags.Gamma // "NULL")是jq的条件替代语法,当Gamma键不存在或值为空时,自动返回NULL- 最后用
sed移除csv默认生成的双引号,完全匹配预期输出格式
方案2:使用Python代码实现
适用于需要后续扩展逻辑的场景,代码如下:
import json import csv # 读取输入JSON文件 with open("input.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 写入CSV文件 with open("output.csv", "w", newline="", encoding="utf-8") as f: csv_writer = csv.writer(f) # 写入表头 csv_writer.writerow(["generated_time", "platform", "id", "", ""]) # 遍历处理业务数据(跳过第一个表头元素) for item in json_data[1:]: gamma_value = item["tags"].get("Gamma", "NULL") row = [ item["generated_time"], item["platform"], item["id"], gamma_value, item["created"] ] csv_writer.writerow(row)
两种方案执行后输出结果均与预期一致:
generated_time,platform,id,, 2021-09-09:12:03:12,earth,2eeee67748,Ray,2021-08-25 09:41:06 2021-09-09:12:03:12,sun,xxxxx12334,NULL,2021-08-25 10:11:31
内容的提问来源于stack exchange,提问作者Bond
相关产品推荐
相关产品推荐

