YamlBox

数据转换器 · 5 分钟阅读

JSON 到 CSV:展平嵌套数据而不失去意义

CSV 仍然是可以在任何东西中打开的格式:电子表格、BI 工具、财务系统、审阅者的笔记本电脑。将 JSON 转换为 CSV 主要是如何处理嵌套部分的问题,因为表中每条记录一行,并且列是预先固定的,而 JSON 则可以随意嵌套。

已更新

列问题

有两条规则可以预测 JSON 到 CSV 的转换。首先,列是所有记录中所有键的并集 - 仅出现在一个对象中的键仍然会获得一列,其他地方为空。其次,每一行必须以相同的顺序发出值。出现任何错误都会产生一个可以正常打开的文件,并且与缺少键的第一行默默地错位。

展平嵌套对象

传统的技术是点符号:包含`city`和`postcode`的`address`变成`address.city`和`address.postcode`。这使得电子表格中的每个值都可见且可查询,但代价是标题较长。深度嵌套的结构可能会产生难以操作的名称,因此请扁平化您控制数据的一层,并在您探索时让工具完全扁平化。

                {"id": 7, "customer": {"name": "Ada", "plan": "pro"}}
→ id,customer.name,customer.plan
   7,Ada,pro
              

数组:扁平化严重的部分

可以使用分隔符将一组标量连接到一个单元格中,这对于标签来说很好,对于短列表来说也可以接受。对象数组(例如订单行项目)不属于单个单元格:将其连接起来,并且无法对数量求和;将其索引为 `items.0.sku`、`items.1.sku`,并且列取决于每个订单碰巧有多少商品。当遇到这种情况时,数据需要两个 CSV 文件,每个表一个,通过键链接。

如果单元格包含逗号、引号或换行符,则必须将其加引号,并且内部引号加倍。生成的输出可以处理这个问题,而手工编辑的 CSV 通常不会,这就是为什么导入在包含地址的行上间歇性失败的原因。

使文件在 Excel 中表现良好

除非另有说明,否则 Excel 会采用系统编码,因此重音字符可能会损坏。发出带有字节顺序标记的 UTF-8 可以避免这种情况;如果没有它,在 Numbers 或 Sheets 中看起来完美的同一个文件在 Excel 中也会显示 mojibake。长数字标识符(卡号、大 SKU)也值得引用,因此 Excel 不会将它们转换为科学记数法。

当 CSV 是错误输出时

如果消费者是一个程序,CSV 丢弃类型信息和嵌套没有任何好处 - JSON 行或数据库加载更好。 CSV 适用于使用电子表格的人:报告、导出、对账。有意识地选择它,而不是习惯性地选择它,就成功了一半。 YamlBox JSON 到 CSV 转换器完全在浏览器中运行,因此包含客户行的导出永远不会离开您的计算机。

JSON 至 CSV — 常见问题

将 JSON 转换为 CSV 时如何处理嵌套对象?

默认情况下,它们会用点符号展平 — `customer.name` 成为其自己的列。您可以改为对值进行分组,但扁平化的列使文件可以在电子表格中进行过滤和旋转。

为什么转换后重音字符在 Excel 中看起来不正确?

Excel 使用本地系统编码读取文件,除非字节顺序标记另有说明。使用 BOM 导出 UTF-8 可以保持名称完整;如果没有它,相同的数据在 Google Sheets 中可以正确呈现,而在 Excel 中则无法正确呈现。

我可以将对象数组转换为 CSV 吗?

列来自所有记录中键的并集,因此混合形状对象的数组仍然会生成一个有效的表,其中缺少键的地方有空白。这些对象内的数组需要拆分为第二个文件。

这篇文章中提到的工具

浏览 19 工具的完整列表

更多文章可供阅读

所有19帖子→