从电子表格中获取数据而不失去理智
CSV、JSON、Excel之间的数据格式转换经常出错?了解常见的转换陷阱、编码问题和数据丢失风险,掌握安全高效的格式转换方法。
有人给你发了个Excel文件。你的应用需要JSON。这应该很简单。
从来都不简单。
电子表格有合并单元格。或者日期格式很奇怪。或者那一列有人在应该是数字字段的地方输入了"N/A"。每次转换都变成调试会话。
这里教你怎么减少痛苦。
CSV:通用翻译器
几乎每个电子表格应用都导出为CSV。几乎每个系统都能读CSV。它是数据格式的最小公分母。
CSV只是文本:用逗号分隔的值,用换行分隔的行。
name,email,age
John,john@example.com,32
Jane,jane@example.com,28
简单。直到它不简单。
逗号问题。 如果值包含逗号怎么办?"Smith, John"作为名字会破坏解析。解决方案:用引号包裹值。好的CSV工具会自动处理。坏的不会。
换行问题。 如果值包含换行符怎么办?同样的解决方案:引号。同样的警告:不是所有工具都处理。
编码问题。 Windows上的Excel默认字符编码和Mac上的Excel不同。特殊字符会损坏。尽可能导出为"CSV UTF-8"。
JSON:API真正想要的
Web应用更喜欢JSON:
[
{"name": "John", "email": "john@example.com", "age": 32},
{"name": "Jane", "email": "jane@example.com", "age": 28}
]
从CSV转换到JSON通常很直接。第一行变成属性名,后续行变成对象。
问题出现在:
类型丢失。 CSV全是字符串。"32"可能是数字或文本。JSON转换必须猜。大多数工具假设:看起来像数字,可能是数字。
Null很模糊。 空单元格 = null?空字符串?完全省略属性?不同工具决定不同。
数组不存在。 CSV是扁平的。如果你的JSON需要嵌套数组,你要手动工作。
常见工作流
- 从Excel/Sheets导出为CSV
- 在文本编辑器中打开,检查明显问题
- 转换为JSON
- 验证JSON结构
- 抽查几条记录
抽查很重要。自动转换可能会静默损坏数据。日期变成数字。邮编丢失前导零。"O'Brien"变成"O'Brien"。在信任之前验证。
处理奇怪的数据
日期。 Excel内部将日期存储为数字。导出可能产生"44927"而不是"2023-01-15"。转换前了解你的日期格式。
作为文本的数字。 邮编、电话号码、ID——这些看起来像数字但不应该被视为数字。前导零很重要。显式转换为字符串。
Unicode。 带重音的名字,非拉丁文字的数据。确保你的管道端到端处理UTF-8。
反向转换
JSON到CSV会丢失信息。嵌套对象扁平化很尴尬。数组变成...究竟什么?多行?连接的字符串?
对于结构一致的扁平JSON,转换工作正常。对于复杂的嵌套数据,你在做如何扁平化的决定。记录这些决定。
YAML和XML
YAML是JSON的潮人表亲。更可读,相同的数据结构,容易相互转换。
XML是企业版本。啰嗦,旧系统广泛支持,需要更多解析工作。
两者都能转换为JSON并返回。主要头痛的是XML中的属性vs元素——JSON没有这种区分。
数据转换是关于知道什么可能出错并检查它。自动化转换,验证结果,永远不要相信"它就是能用"。