开发者工具·语法转换器
CSV 到 JSON 和 JSON 到 CSV:标题、字符串值和扁平化
· 工作原理
json csv 数据格式
CSV 是扁平的、无类型的并且其自身的分隔符不明确,而 JSON 是嵌套的和类型化的。这篇文章展示了转换器如何将行映射到对象并映射回对象,以及每个方向上信息丢失的位置。
每个数字都用引号返回 - CSV 导出转换为 JSON,其中 42 变为“42”,并且邮政编码暂时保留其前导零
工作簿要求提供 CSV 到 JSON 示例,但 ToolAcre 从不读取 CSV。该引擎确切地通告了九个定向对,并且没有一个以 CSV 开头。读取文件需要选择分隔符、引用、标题存在和单元格类型;该小组拒绝做出四个无声的猜测。因此,更正后的文章记录了运送的 JSON 至 CSV 方向。
这种单向决策在界面和错误中都是可见的。 CSV 显示为目标,而不是源,并且尝试反向返回 `UNSUPPORTED_CONVERSION` 并建议使用询问方言和类型的工具。即使一般主题在其他地方很常见,暗示两个方向的标题也会错误地描述产品。
CSV:从工具实际发送的 JSON 到 CSV 路径开始
根 JSON 数组提供行。一个普通的对象变成一行。唯一键包含数组的对象会解开该数组并警告它使用了指定的属性。具有附加同级键的对象不会解包,因为这样做会丢弃或重复这些同级。
在收集列之前会展平每个选定的记录。记录甚至可以是数组内的标量;它们使用 `value` 列。文档根处的裸标量会被拒绝,因为一个字符串或数字不会定义包含记录和字段的表。
从 JSON 选择记录:数组、单个对象和一键数组包装器
JSON 类型仅作为单元格文本存在。布尔值变为 `true` 和 `false`,数字使用十进制呈现,null 变为空单元格。 CSV 无法区分 null 和空字符串,因此编写器对 null 进行计数并警告歧义,而不是调用等效结果。
宽整数在此阶段之前已接受 JSON 解析,因此不安全的数字文字可能会丢失精度。将标识符放在引号中可以保留其文本。当类似公式的字符串以 `=`、`+`、`-`、`@`、制表符或回车符开头时,默认情况下会收到一个额外的撇号;实际数字 `-5` 仍然是一个数字并且没有前缀。
为什么 CSV 输出无法保留 JSON 类型
列是按首次出现顺序排列的扁平化键的并集。如果一行具有 `a`,另一行具有 `b`,则输出具有两列,并用空单元格填充每个缺失的字段。警告报告不规则的行,而不是将值转移到错误的标题下。
排序对象键不适用于 CSV;作者的规则是在记录中首次出现。这使得示例对于固定的 JSON 输入稳定,但它不是模式契约。当下游导入需要规定的顺序时,有意安排源密钥或对标头进行后处理。
展平嵌套数据 — 点路径(例如 address.city)、作为索引列或连接字符串的数组,以及 CSV 根本无法保持形状的点
嵌套对象键用点连接:`address.city`。数组使用相同的分隔符和数字索引:`tags.0`、`tags.1`。空对象和数组在其自己的路径上保留一个空单元,而不是消失。这会产生一个矩形,同时承认一棵树已被投影到名称中。
已包含点的源键与嵌套路径不明确。 ToolAcre 会检测并发出警告,但不会发明电子表格无法理解的转义语法。深数组或长数组也可能超出 2,000 列上限,此时转换将被拒绝,而不是发出普通电子表格软件无法使用的表。
工作示例:客户以两种方式列出 — CSV 到 JSON,编辑嵌套字段,然后 JSON 返回 CSV,嵌套扁平化
使用 `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`。标头包括 id、address.city、tags.0、tags.1 和 note。第二行接收缺失标签索引的空白,并且其空注释与空文本无法区分。
第一个注释以撇号为前缀,因此电子表格将其视为文本。记录以 CRLF 结尾,包含分隔符、引号或行结尾的字段使用双引号,嵌入的引号使用双引号。选择分号或制表符会更改分隔符;可以为需要的消费者添加可选的 UTF-8 BOM。
工作示例:嵌套客户数组一次展平为 CSV
格式错误或编码不明确 CSV 位于此路由之外,因为没有 CSV 进入其中。 CSV Cleaner 是选择或检测方言并修复引用的地方。这里的源是严格的 JSON ,输出遵循记录的编写器约定。
转换器还限制 100,000 行和 2,000 列的输出。空数组会被拒绝,因为既没有标题也没有行的文件不包含表格形状。这些限制是强制执行的代码路径,而不是性能承诺,并且本文并未发明吞吐量数据。
要点:CSV 是一个表,JSON 是一棵树 - 以及语法转换器面板如何在它们之间移动而不上传行
JSON 是一棵类型树; CSV 是一个文本表。 ToolAcre 选择行、展平路径、联合列、引号字段并中和危险文本,但它无法保留空与空或稍后重建嵌套。这些损失是结构性的而非格式化的噪音。
当电子表格形式的输出是预期的工件时使用此方向。如果您需要 CSV 到 JSON,请选择一个询问分隔符、标头和类型的阅读器。拒绝相反比返回根据未经审查的猜测构建的令人信服的 JSON 更安全。