数据和电子表格 · CSV 清理器
为什么 CSV 中的空字符串、NULL 和缺失字段不是一回事
· 为什么它很重要
csv json 数据格式
CSV 无法说“没有价值”;它只有文字。这篇文章解释了空字段、带引号的空字符串、文字 NULL 和短行有何不同,为什么加载程序不同意它们,以及转换为 JSON 如何强制解决这个问题。
相同的空白单元格在一个系统中变为 NULL,而在另一个系统中变为空字符串 — 为什么会改变连接、计数和平均值
看起来空白的源单元可以携带多个历史记录,但 ToolAcre 的 JSON 输出故意将它们缩小为一种表示形式。空字段、带引号的空字段和解析器填充的短行都成为当前键下的空字符串。从外观上无法推断出空值。
只有当消费者知道时,这种一致性才有用。专门针对 null 的代码测试不会替代“”的默认值。确定接收边界处的缺失值约定,而不是假设转换器保留 CSV 语法或其选择的解析模型未保留的区别。
在 ToolAcre 中,空白和填充的缺失单元格都会变成空字符串,除非使用者重新解释它们
CSV 可以包含两个之间没有任何内容的分隔符、显式引用的空字符串、文字文本(例如 NULL 或 NA)以及在标题宽度之前结束的行。 ToolAcre 将前两个解析为空字符串,并将文字标记保留为普通文本。
对于短行,它会发出 `RAGGED_ROW` 警告,并用空字符串填充缺少的尾部单元格。对于长行,它会保留表中的额外单元格,但 JSON 转换没有它们的标头键并忽略它们。这种不对称性就是结构警告需要在转换之前采取行动的原因。
常见加载器如何解释每个加载器 - 电子表格、数据库和数据框架库中的不同默认值
不同的数据库客户端和分析库公开其自己的可配置空标记和空字段策略。该存储库无法建立这些默认值,因此本文并不声称所有电子表格或加载器都同意。它记录了其源代码和测试可用的一种实现。
将文件传递到另一个系统时,读取该导入程序的设置并为 ``, `""`、NULL 和短行创建固定装置。可靠的契约在实际边界上得到证明。关于“CSV通常意味着什么”的一般民间传说对于缺失值来说太弱了。
加载程序默认值有所不同;本文记录了 ToolAcre,而不是概括电子表格或数据库行为
文本 NULL 特别危险,因为它可能是真实内容或发件人的哨兵。 ToolAcre 没有配置哨兵列表,因此将其保留为四字符字符串“NULL”。对于 NA、N/A, 零和生产者可能使用的任何其他令牌也是如此。
如果没有特定于字段的规则,请勿全局替换此类字符串。注释列可以合法地包含“NULL”,而代码列可以使用 NA。使用生产者文档或模式解决含义,然后仅转换正在审查的适当列。
JSON 让您做出决定 — 文件转换后,null、空字符串和缺失键是三种不同的东西
JSON 区分 null、空字符串和不存在的属性,但 ToolAcre 为每个标题列选择带有字符串值的当前键。丢失或填充的单元格变成“”。转换器不会生成 JSON null,也不会仅仅因为单元格为空而忽略键。
剩余单元格不同:没有相应的标头,没有可分配的键,因此生成的对象中不存在它。行警告告诉您可能会发生丢失。在下载之前修复标题或行宽度,而不是将缺失视为有意义的空策略。
ToolAcre 发出空字符串并显示键,而不是空或不存在的键
使用标头 id、note、code 和四个记录:`1,,A`、`2,"",NULL`、`3,hello` 和 `4,world,B,extra`。前两个音符变成空弦;第二行中的代码保持“NULL”。第三行在填充后收到代码“”,而第四行警告额外的单元格没有键。
结果对象明显带有表示列的相同三个键。这个工作案例比空白单元格的屏幕截图提供更多信息,因为它将解析警告连接到 JSON 形状。它还说明了为什么文字标记需要单独的域决策。
这不包括什么 - 缺失值默认值的插补和业务规则
插补位于路线之外。转换器不会填充缺失的价格、复制以前的值或从相邻行推断默认值。这些更改取决于业务含义,并且应该在模式区分未知、不适用和故意为空的值之后发生。
它也不保留未加引号的空字段和 `""` 之间的语法区别;两者都解析为相同的单元格字符串。如果这种区别很重要,那么 CSV 不会通过此解析器的表模型来承载它。选择具有显式状态的表示或将原始源与派生数据一起保留。
在加载之前确定空白的含义 - ToolAcre CSV Cleaner 的 CSV 到 JSON 转换如何使表示可见
在将 JSON 加载到键入的代码中之前确定空白的含义。 ToolAcre 提供了透明的基线:无处不在的字符串值、缺少表示的单元格的空字符串、未更改的文字标记词以及行形状超出可用键的警告。
检查这些警告并记录任何以后的强制。转换器无法仅从文本创建缺失值语义,但它可以避免隐藏自己的选择。这种可预测的行为使得下一个边界负责它实际上有资格执行的策略。