数据和电子表格 · CSV 清理器
CSV 与 JSON:两种数据格式及其背后结构的想法
· 背景
csv json 数据格式
CSV 描述一个表; JSON 描述一棵树。这篇文章解释了 JSON 来自哪里,为什么它带有 CSV 不能的类型和嵌套,以及每次数据在两者之间移动时不匹配意味着什么。
相同的客户列表看起来与 CSV 和 JSON 完全不同 - 为什么每种格式编码不同的结构理念
客户表在 CSV 中看起来很紧凑,因为每一行都借用了一个共享标头的含义。 JSON 在每个对象中重复属性名称,并且可以在客户下方嵌套地址或列表。因此,即使两个文件的可见事实重叠,它们也表达了不同的结构能力。
ToolAcre 转换常见的交集:平面标题加上数据行成为平面对象的顶级数组。它不会将标题中的标点符号转换为分支或从重复的列推断数组。了解这一边界可以防止平面转换器被误认为是数据模型设计者。
CSV 作为网格 — 行和列、位置含义,除了文本之外没有任何内容
在此实现中,CSV 是一个矩形字符串表。第一行提供标题名称,后面的每个单元格从其列位置接收含义。短行被填充,长行被警告,因为只有当行宽与标题一致时,位置才能可靠地工作。
没有本机数字、布尔值、对象或空单元格。引号保护语法,但不分配类型。数字序列和单词 true 仍然是文本值,这可以保持标识符稳定,并要求消费者在实际存在的地方应用模式。
在 ToolAcre 中,CSV 单元格是位于一个标题行下的字符串
该工作簿要求提供 JSON 2000 年代初期的起源和标准历史,但此存储库不是这些日期或出版物的来源。可验证的行为是浏览器使用 `JSON.parse` 和 `JSON.stringify`,接受顶级对象数组以转换为表。
无效 JSON 收到特定解析错误,非数组根被拒绝,并且不支持包含基元的数组。对于访问者来说,这些运行时边界比未引用的年表更重要。历史背景应该来自该任务源集之外的主要标准。
JSON 标准历史记录位于存储库证据之外;支持的运行时形状是可验证的
JSON 对象在其值旁边携带每个键,而 CSV 单元依赖于同一索引处的标头。 ToolAcre 计算一次消除歧义的键,然后按位置映射每一行。缺少表示的单元格变成空字符串,因此对象共享稳定的键集。
该自我描述具有大小和重复成本,但使每个 JSON 记录易于理解,而无需单独定位标头。相反,在没有标题的情况下更改 CSV 列顺序会破坏其意义。转换必须使整个表格中的姓名和职位保持配对。
树与表 — 嵌套、数组和可选键,以及为什么它们在一行中没有自然的位置
JSON 值可以包含对象和数组,而一个 CSV 单元本身不能分支。在相反的方向上,ToolAcre 使用 `JSON.stringify` 序列化嵌套值,并将该 JSON 文本放置在一个单元格中。它不会创建 address_city 列或其他标记行。
跨 JSON 记录的可选键成为按首次看到的顺序排列的列的并集,在对象缺少键的情况下为空白。对于稀疏的扁平物体来说,这是一种可防御的扁平化。它不为任意树提供自然映射,并且路线是这么说的而不是猜测。
工作示例 — 具有嵌套地址和标签列表的一条记录,如 JSON 所示,然后强制进入 CSV 列
扁平 CSV 行 `id,name,city` 后跟 `001,Ada,London` 干净地转换为具有三个字符串属性的一个对象。如果 JSON 相反包含 `address: {city: "London"}` 和 `tags: ["math","code"]`,则反向转换会将这些嵌套值写入地址和标记列下的 JSON 字符串。
再次加载 CSV 会生成包含 JSON 语法的字符串,而不是重建的嵌套值。稍后的应用程序可以在其自己的模式下解析这些单元格,但 ToolAcre 不能。进行的比较准确地隔离了表结构结束和树结构开始的位置。
工作示例:平面字段直接转换,而嵌套 JSON 仅保留为反向单元格文本
JSON 行、模式语言和流解析器位于实现之外。输出是一个缩进数组,文件输入在转换之前读入内存。不要根据解析工作器的存在来推断逐记录流。
同样,该工具不会验证所需的属性或数值范围。它保护对象键免受空白和重复标题的影响并报告行形状,但语义正确性仍然是消费者的责任。扁平化语法可以有效,而业务数据却是错误的。
了解您要转向哪种结构 - ToolAcre CSV Cleaner 如何在 CSV 和 JSON 之间转换平面表格数据
了解目的地期望哪种结构。对于平面导出,ToolAcre 提供了一个透明的桥梁:标题变成唯一键,行变成对象,值仍然是字符串。对于嵌套应用程序模型,定义映射而不是通过意外的列命名约定强制分支。
在下载之前预览表,解决参差不齐的行并检查生成的 JSON。当在其狭窄的格式交集内使用时,该转换器是最强大的。它不会消除它们的概念差异,值得信赖的工作流程不应该要求它这样做。