You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jq将非数组结构单行JSON文件映射转换为CSV的技术咨询

将每行独立JSON对象转换为指定字段的CSV的实现方法

针对你这种每行存储一个独立JSON对象(JSON Lines格式)的文件,要提取指定字段并转换成CSV,这里有几个实用的实现方案,你可以根据自己的场景选择:

方法一:使用jq命令行工具(快速便捷)

jq是处理JSON的老牌命令行工具,轻量高效,适合快速完成这类转换任务:

  1. 确保你已经安装了jq:

    • Linux发行版通常自带,可通过jq --version验证
    • macOS可以用Homebrew安装:brew install jq
    • Windows可以用Chocolatey:choco install jq或直接下载官方二进制包
  2. 执行以下命令完成转换:

jq -r '
    ["id", "lastUpdated", "identifier1", "identifier2", "identifier3", "code"],
    [.id, .meta.lastUpdated, .identifier[0].value, .identifier[1].value, .identifier[2].value, .code[0].coding[0].code]
    | @csv
' input.json > output.csv

命令解释:

  • -r:输出原始字符串(去掉JSON格式的引号)
  • 第一行数组定义CSV的表头
  • 第二行数组从每个JSON对象中提取对应字段的值
  • @csv:将数组格式化为标准CSV格式
  • input.json是你的输入文件路径,output.csv是生成的CSV文件路径

方法二:使用Python内置模块(无需额外依赖)

如果需要自定义逻辑或者不想用命令行工具,用Python内置的json和csv模块就能完成,兼容性拉满:

import json
import csv

# 定义字段映射:键是CSV列名,值是提取字段的逻辑函数
field_map = [
    ("id", lambda data: data["id"]),
    ("lastUpdated", lambda data: data["meta"]["lastUpdated"]),
    ("identifier1", lambda data: data["identifier"][0]["value"]),
    ("identifier2", lambda data: data["identifier"][1]["value"]),
    ("identifier3", lambda data: data["identifier"][2]["value"]),
    ("code", lambda data: data["code"][0]["coding"][0]["code"])
]

# 获取CSV表头
headers = [col_name for col_name, _ in field_map]

# 读写文件完成转换
with open("input.json", "r", encoding="utf-8") as json_in, \
     open("output.csv", "w", newline="", encoding="utf-8") as csv_out:
    writer = csv.writer(csv_out)
    writer.writerow(headers)
    
    # 逐行解析JSON并写入CSV
    for line in json_in:
        json_data = json.loads(line.strip())
        row_values = [extract_func(json_data) for _, extract_func in field_map]
        writer.writerow(row_values)

脚本解释:

  • 逐行读取输入文件,避免一次性加载大文件到内存
  • 用lambda函数明确每个字段的提取路径,后续修改字段时更方便
  • 内置模块无需额外安装,适合任何Python环境

方法三:使用Python Pandas库(适合大数据量或数据分析场景)

如果你的数据量较大,或者后续需要做数据分析,用Pandas会更高效:

import pandas as pd

# 读取JSON Lines格式的文件
df = pd.read_json("input.json", lines=True)

# 从嵌套结构中提取字段并命名
df["lastUpdated"] = df["meta"].apply(lambda x: x["lastUpdated"])
df["identifier1"] = df["identifier"].apply(lambda x: x[0]["value"])
df["identifier2"] = df["identifier"].apply(lambda x: x[1]["value"])
df["identifier3"] = df["identifier"].apply(lambda x: x[2]["value"])
df["code"] = df["code"].apply(lambda x: x[0]["coding"][0]["code"])

# 选择需要的列并导出为CSV
result_df = df[["id", "lastUpdated", "identifier1", "identifier2", "identifier3", "code"]]
result_df.to_csv("output.csv", index=False, encoding="utf-8")

脚本解释:

  • pd.read_json(..., lines=True)专门适配每行一个JSON对象的格式
  • apply函数快速处理嵌套的JSON结构
  • 导出时index=False避免生成多余的索引列

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 03:12:41