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

如何使用json2csv正确将多个JSON文件合并输出为单个CSV

多JSON文件合并为单CSV(无重复表头)实现方案

问题背景

需要将多个结构一致的NFT元数据JSON文件合并为同一个CSV文件,单条JSON结构示例:

{
  "address": "0xe9f6191596bca549e20431978ee09d3f8db959a9",
  "copyright": "None",
  "created_at": "None"
  // 其余字段省略
}

原有脚本逻辑为遍历哈希列表,调用接口拉取单个JSON后调用json2csv转换,先后尝试两种写法均存在问题:

  • 使用-o参数指定输出文件:每次执行会覆盖已有内容,最终CSV仅保留最后一条数据
  • 使用>>追加重定向、或先转单个CSV再cat拼接:每次转换都会自动生成表头,最终CSV出现多行重复表头

可行解决方案

以下方案均可实现无重复表头的合并效果,可根据自身场景选择:

方案1:控制表头输出逻辑(改动最小,适配原有脚本流程)

json2csv CLI提供了--no-header(简写-n)参数,开启后转换时不会输出表头行。只需在循环中判断是否为第一个处理的文件:第一个文件正常输出带表头的内容,后续所有文件追加时跳过表头即可。
修改后的完整脚本如下:

mkdir -p curl_outs
# 提前清空目标CSV文件
> main.csv
# 标记是否为第一条数据
first_record=1
{ cat hashes.hash; echo; } | while read h; do 
    echo "Downloading $h"
    curl -L https://main.net955305.contentfabric.io/s/main/q/$h/meta/public/nft > curl_outs/$h.json; 
    node index.js $h;
    if [ $first_record -eq 1 ]; then
        # 第一条数据正常转换,写入表头+内容
        json2csv -i curl_outs/$h.json >> main.csv
        first_record=0
    else
        # 后续数据转换时跳过表头,仅追加内容行
        json2csv -i curl_outs/$h.json --no-header >> main.csv
    fi
done

方案2:直接拼接已生成的单个CSV文件(无需重新转换)

如果你已经把所有单个JSON都转成了独立CSV存放在csv_outs目录,不需要重新跑转换流程,用awk命令即可自动跳过所有非首文件的表头完成拼接:

# 先清空目标文件
> main.csv
# 遍历所有单个CSV,第一个文件全量写入,其余文件从第2行开始写入
awk 'FNR==1 && NR!=1 {next} {print}' csv_outs/*.csv > main.csv

命令逻辑说明:

  • FNR==1代表当前读取到某一个文件的第一行(也就是表头行)
  • NR!=1代表当前不是全局第一行(也就是不是第一个文件的表头)
  • 满足以上两个条件时跳过该行,其余行全部正常写入

方案3:合并JSON后单次转换(效率最高,无中间冗余文件)

如果不需要保留单个JSON的中间文件,可以直接把所有接口返回的JSON对象整合成一个JSON数组,最后只调用一次json2csv完成转换,从根源上避免重复表头问题,执行效率更高:

mkdir -p curl_outs
# 初始化JSON数组
echo "[" > all_nft.json
first_record=1
{ cat hashes.hash; echo; } | while read h; do 
    echo "Downloading $h"
    if [ $first_record -eq 1 ]; then
        first_record=0
    else
        # 非第一条数据前加逗号分隔
        echo "," >> all_nft.json
    fi
    curl -L https://main.net955305.contentfabric.io/s/main/q/$h/meta/public/nft >> all_nft.json; 
    node index.js $h;
done
# 闭合JSON数组
echo "]" >> all_nft.json
# 单次转换,直接生成带唯一表头的完整CSV
json2csv -i all_nft.json -o main.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:06:13