Command Palette

Search for a command to run...

JSON 到 CSV 转换:开发人员在 2026 年使用的 5 种方法

JSON 到 CSV 转换:开发人员在 2026 年使用的 5 种方法

T
Toolz Team
|Jun 27, 2026|15 最小读数

数据工具 合集的一部分

我编写的第一台 JSON 到 CSV 转换器持续了三天的生产。

是"导出到电子表格"的Laravel管理面板中的按钮,而我的转换逻辑是- I'm对此并不感到自豪- values.join(",")。它通过测试航行。然后一个用户导出了一个客户列表,其中一家公司被命名为"史密斯,琼斯&合作伙伴,"并且它向右移动一个位置之后的每一列。他们的会计师在有人注意到电话号码在电子邮件列之前导入了340行未对齐的数据。

CSV中的逗号是't一个可以串联的分隔符。it's一个语法,定义在 RFC 4180,带有实际的转义规则。那个错误就是为什么 JSON 到 CSV 转换器 我后来为 toolz。dev 构建,将逃逸视为不可协商的 - 以及为什么本指南实时花在边缘案例上,而不仅仅是快乐的道路上。

以下是我实际使用的五种方法,每种方法获胜时以及每种方法咬合的位置。

TL;博士: 对于一次性转换,请将 JSON 粘贴到 Toolz.dev JSON 到 CSV 转换器--用点符号将嵌套对象压平, 每RFC 4180正确转义, 100%在浏览器中运行 对于重复出现的作业, 编写脚本: pd.json_normalize() 在 Python 或 json2csv 在节点中打包。通过。 json格式化程序 首先,保持原来的 JSON - CSV 平坦化是单向的。


当您已经拥有 JSON 时,为什么需要 CSV?

因为需要您数据的人不't住在您的终端。每次转换请求I've曾经得到减少到五种情况之一:

分析师在电子表格中工作。 Excel、谷歌表、Tableau、Power BI- 它们都原生吸入CSV,并扼杀嵌套的JSON。将API输出转换为CSV是工程数据到达业务端的方式。

数据库批量导入平面文件。 PostgreSQL's COPY 还有 MySQL's LOAD DATA want表格输入。json列存在,但加载到真实的关系表中意味着首先变平。

迁徙需要通用语言。 NoSQL 存储和关系存储之间,或者在两个 SaaS 平台之间移动数据,CSV 是两端可靠理解的格式。

合规性喜欢平面文件。 一些档案要求指定了人类可读的格式。 CSV 在任何事物中打开,几十年后。

利益相关者可以't 阅读 JSON。 A产品经理询问"我可以把它作为电子表格吗?"是最常见的单一触发器,它是我损坏的导出按钮的触发器。

Diagram showing JSON data flowing through conversion to CSV format with use cases branching to spreadsheets, databases, and analytics


是什么让 JSON 到 CSV 的转换变得困难?

Flat JSON 是微不足道的。这个:

[
  {"id": 1, "name": "Alice", "email": "[email protected]", "age": 30},
  {"id": 2, "name": "Bob", "email": "[email protected]", "age": 25}
]

became this, 标题的键, 行元素:

id,name,email,age
1,Alice,[email protected],30
2,Bob,[email protected],25

但真正的API响应从来都不是平的,它们看起来像这样:

[
  {
    "id": 1,
    "name": "Alice",
    "address": {"street": "123 Main St", "city": "San Francisco", "state": "CA"},
    "skills": ["JavaScript", "Python", "Go"]
  }
]

CSV没有"内部的概念。"所以你选择一个扁平化策略,每个都有成本:

点符号变平- 嵌套键成为复合标头:

id,name,address.street,address.city,address.state,skills
1,Alice,123 Main St,San Francisco,CA,"JavaScript; Python; Go"

数组的索引列- skills.0skills.1skills.2。可预测的,但一个有14个技能的记录为每个人制作了14个专栏。

JSON 编码的单元格-把原始的JSON塞进单元格,双引。无损,无法读取,这让分析师感到悲伤。

带有连接数组的点符号是人类消费的正确默认值 - it's what the Toolz.dev 转换器 product。indexed列在下游代码需要每个元素可寻址时获胜。json-in-cells是往返的最后手段。


方法 1:如何在线将 JSON 转换为 CSV?

最适合: 一次性转换,非开发人员,任何低于几十 MB 的产品。

  1. 打开 JSON 到 CSV 转换器
  2. 粘贴您的 JSON - 对象数组或单个对象。
  3. 该工具检测结构,将嵌套对象压平为点表示法,并立即渲染 CSV。
  4. 复制它,或下载 .csv

我默认此原因适用于任何非重复的脚本:零设置、正确的 RFC 4180 转义(学习了该课程)、跨不一致对象的自动密钥结合,以及 - 因为它's 客户端 - 充满客户电子邮件的 API 响应您刚刚粘贴的永远不会离开您的机器。如果您不这样做,请观看网络选项卡't 相信我;that's 我对每个在线转换器应用的测试,并且大多数都失败了。

Where it's错误的工具:反复转换(脚本它)和深层病态嵌套在你'll想手工挑选扁平化策略。

Diagram of the toolz.dev JSON to CSV converter showing JSON input on the left and CSV output on the right


方法 2:如何在 JavaScript 中将 JSON 转换为 CSV?

最适合: 构建管道、节点服务、自定义转换逻辑。

Here's 最小正确版本 - 注意逃跑,这是我三天灾难跳过的部分:

function jsonToCsv(jsonArray) {
  if (!jsonArray.length) return "";

  const headers = Object.keys(jsonArray[0]);
  const csvRows = [
    headers.join(","),
    ...jsonArray.map(row =>
      headers.map(header => {
        const value = row[header] ?? "";
        // RFC 4180: double embedded quotes, wrap anything containing , " or newline
        const escaped = String(value).replace(/"/g, '""');
        return /[,"\n\r]/.test(escaped) ? `"${escaped}"` : escaped;
      }).join(",")
    )
  ];

  return csvRows.join("\n");
}

对于嵌套输入,首先压平并联合按键 - 仅从第一个对象获取标头是手摇转换器中第二常见的错误:

function flattenObject(obj, prefix = "") {
  const result = {};
  for (const [key, value] of Object.entries(obj)) {
    const newKey = prefix ? `${prefix}.${key}` : key;
    if (value && typeof value === "object" && !Array.isArray(value)) {
      Object.assign(result, flattenObject(value, newKey));
    } else if (Array.isArray(value)) {
      result[newKey] = value.join("; ");
    } else {
      result[newKey] = value;
    }
  }
  return result;
}

function nestedJsonToCsv(jsonArray) {
  const flattened = jsonArray.map(item => flattenObject(item));
  // Union of ALL keys, not just the first object's
  const headers = [...new Set(flattened.flatMap(Object.keys))];
  // ...then emit rows exactly as in jsonToCsv above
}

或者跳过手卷 - json2csv package 多年来一直处理这些边缘:

import { Parser } from "json2csv";

const parser = new Parser({ flatten: true });
const csv = parser.parse(data);

方法 3:如何在 Python 中将 JSON 转换为 CSV?

最适合: 数据科学工作流程,任何已经触及熊猫的东西。

熊猫单行包覆扁平 JSON:

import pandas as pd

df = pd.read_json("data.json")
df.to_csv("output.csv", index=False)

真正有用的功能是 pd.json_normalize()- 专为嵌套 API 响应而构建:

import pandas as pd
import requests

response = requests.get("https://api.example.com/users")
df = pd.json_normalize(response.json())
print(df.columns.tolist())
# ['id', 'name', 'skills', 'address.street', 'address.city', 'address.state']

# Arrays still need a decision — join them explicitly:
df["skills"] = df["skills"].apply(lambda x: "; ".join(x) if isinstance(x, list) else x)
df.to_csv("output.csv", index=False)

注意 json_normalize 扁平化嵌套 对象 但离开了 阵列 python 列表一样 - 如果您跳过连接步骤,则您的 CSV 单元格包含 ['JavaScript', 'Python'] 逐字逐句。每个人都打过一次。

没有熊猫可用?标准库处理平面 JSON 罚款:

import json, csv

with open("data.json") as f:
    data = json.load(f)

with open("output.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

方法 4:如何从命令行将 JSON 转换为 CSV?

最适合: shell脚本,ci管道,安装熊猫的服务器是过度杀伤。

jq 本地使用它 @csv,其正确逃逸:

cat data.json | jq -r '
  (.[0] | keys_unsorted) as $keys |
  ($keys | @csv),
  (.[] | [.[$keys[]]] | @csv)
'

csvkit's in2csv 是低思想的选择:

pip install csvkit
in2csv data.json > output.csv

还有米勒(mlr)在您想要在同一遍中过滤时闪耀:

mlr --json2csv filter '$age > 25' data.json > output.csv

可组合性是重点- curl -s api.example.com/data | jq ... > report.csv 是 cron 一行中完整的 API 到电子表格管道。


方法 5:您可以将 JSON 直接导入 Excel 或 Google 表格吗?

最适合: 非开发商、实时清爽数据、一次性进口。

卓越: Data → 从 Web 获取 Data → 粘贴 API URL,Power Query 为您提供一个可视化编辑器,可在加载之前扩展嵌套记录。真正适合重复刷新同一来源。

谷歌表: 扩展 → Apps Script,然后是一个小获取函数:

function importJSON(url) {
  const response = UrlFetchApp.fetch(url);
  const data = JSON.parse(response.getContentText());
  if (!Array.isArray(data) || data.length === 0) return [["No data"]];
  const headers = Object.keys(data[0]);
  const rows = data.map(item => headers.map(h => item[h] ?? ""));
  return [headers, ...rows];
}

用于单元格中 =importJSON("https://api.example.com/data")

诚实的取向:对于一次性进口,与转换 在线工具 打开 CSV 比任何一个都快。电子表格本机路线只有在数据按时间表刷新时才能赚取设置成本。


您应该选择哪种方法?

方法 设置 内斯特·JSON 经常性使用 数据保持本地状态
在线转换器 没有 自动 每次手动 是的 - 客户端
JavaScript/json2csv npm 安装 flatten 优秀的 是的
Python/熊猫 管道安装 json_normalize 优秀的 是的
jq/csvkit/mlr 包管理器 手动路径 优(cron/ci) 是的
Excel/表 帐户/应用程序 电源查询UI 好(自动刷新) Excel:是的;表:Google 服务器

My rule: 触及浏览器工具,直到第三次I'm转换相同形状的数据- 然后它就变成了一个脚本。


哪些边缘情况会破坏 JSON 到 CSV 的转换?

4个陷阱几乎占了每一个破损的出口I've调试:

键不一致。 对象 1 有 email,对象2有 phone、对象3两者兼而有之。仅从第一个对象中获取标头,您就会默默地丢弃数据。修复是遍布所有对象的键并集,缺失值作为空单元格 - 哪些好的工具会自动执行。

未逃脱的特殊角色。 The "史密斯,琼斯&合作伙伴"问题。根据RFC 4180:在双引号中包裹包含逗号,引号或换行符的值,以及将任何嵌入引号加倍("He said ""hello""")。

大文件。 100 MB左右,全文件解析会很痛苦,改为流- jq streams,pandas以块读取,json Lines格式(每行一个对象)使两者都变得更容易,对于多达几十个MB的文件,浏览器工具很好,因为那里's没有上传。

编码。 名称和地址带有非 ASCII 字符。将所有 UTF-8 端到端,并对 Windows 上的 Excel 持怀疑态度,Windows 历史上希望 BOM 正确检测 UTF-8。

还有一种做法是't可选: 在转换之前进行验证。 截断的 JSON 文件在转换过程中会令人困惑地失败,但显然是在转换中失败 json格式化程序。三十秒的验证胜过十分钟的"为什么我的CSV是空的。"


常见问题

如何免费在线将 JSON 转换为 CSV?

将您的 JSON 粘贴到 toolz。dev 上的 JSON 到 CSV 转换器-它会立即生成 CSV,其中嵌套对象被压平并处理逃逸,然后让您复制或下载结果。没有注册,并且处理是 100% 客户端的,因此您的数据永远不会离开您的浏览器。

我可以将嵌套 JSON 转换为 CSV 吗?

是的。嵌套对象被压平为点符号标头(address.city的),而数组要么被连接成一个分隔的字符串,要么被分割成索引列。The Toolz.dev 转换器 自动应用点表示法;在 Python 中, pd.json_normalize() 做同样的事情。

如何在 Python 中将 JSON 文件转换为 CSV?

import pandas as pd; pd.read_json("data.json").to_csv("output.csv", index=False) 对于平坦的 JSON。对于嵌套结构,使用 pd.json_normalize(data) 首先 - 记住自己加入任何数组列,因为标准化叶子列表完好无损。

What's转换非常大的JSON文件的最佳方式?

流而不是负载: jq 命令行上,或者读取分块的熊猫。首先将文件转换为 JSON Lines(每行一个对象)使流式传输变得更加简单。浏览器工具最多可舒适几十 MB;超过 ~100 MB,请使用命令行。

如何将 CSV 转换回 JSON?

CSV 到 JSON 转换器 reverses the trip - 每行都变成一个被头行键控的对象, 编程上: pd.read_csv("data.csv").to_json(orient="records")

为什么我的 CSV 有一些值周围有报价?

That's正确的行为,而不是bug。RFC 4180要求在任何包含逗号,换行符或引号字符的值周围加倍引号,嵌入的引号加倍。电子表格和解析器在读取时将其剥离。

JSON到CSV转换是无损的吗?

对于平坦的 JSON,是的。对于嵌套的 JSON,值仍然存在,但层次结构不然't - 点符号标头是平坦的 代表,而且你能够't总是从它们重建确切的原始嵌套,保持源JSON;将CSV视为派生视图。

为什么我的列在转换后未对齐?

几乎总是逃逸的失败:一个包含逗号的值被引用为 n't,因此解析器从那一点开始会看到额外的列。它's 来自我的 Laravel 导出按钮的确切错误。使用实现 RFC 4180 而不是字符串连接值的转换器 - 如果您编写了自己的值,请使用类似的值进行测试 Smith, Jones & Partners

如何在 Excel 或 Google Sheets 中将 JSON 转换为 CSV?

两个应用程序都通过帮助程序而不是粘贴导入 JSON。在 Excel 中,使用 Data → 获取数据 → 来自文件 → 来自 JSON,然后在 Power Query 和 Close & Load 中压平查询。在 Google Sheets 中,通过临时应用程序粘贴小数组脚本或使用 JSON 到 CSV 转换器 首先并打开生成的文件 - 通常是一次性的更快路径。

我应该使用哪种 JSON 到 CSV 方法?

对于快速的一次性,客户端转换器速度最快,并且数据私密。对于可重复的管道,请使用 Python 和 pandas;对于庞大的文件,请使用 stream jq 命令行上;只有在非开发人员拥有工作流程时才触及电子表格导入。将工具与您'll重复作业的频率相匹配,而不是与文件's大小单独匹配。


将方法与工作相匹配

JSON-to-CSV看起来像一个解决的单行程序,直到公司名称中的逗号将340行客户数据向右移动一列。该方法的重要性不在于尊重格式:每RFC 4180转义,并结合您的密钥,故意决定您的压平策略,并保留原始的JSON。

对于下一次一次性转换, JSON 到 CSV 转换器 是十五秒路径。首先用。 json格式化程序当数据需要返回时, CSV 到 JSON 转换器 关闭循环 - 这三个循环都在您的浏览器中,它们都从未看到过您的数据服务器端。


相关文章:

Frequently Asked Questions

Paste your JSON into the JSON to CSV Converter on toolz.dev — it instantly generates CSV with nested objects flattened and escaping handled, then lets you copy or download the result. No signup, and processing is 100% client-side, so your data never leaves your browser.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!