我通常使用XML和JSON(有时是纯文本文件)作为平面文件存储。但是,最近我在PHP中遇到了CSV实现。虽然我通常看到CSV用于Excel文件中的输入,但是我从未在编程中使用它。它在任何方面都比XML或JSON更好吗?
我通常使用XML和JSON(有时是纯文本文件)作为平面文件存储。但是,最近我在PHP中遇到了CSV实现。虽然我通常看到CSV用于Excel文件中的输入,但是我从未在编程中使用它。它在任何方面都比XML或JSON更好吗?
Answers:
答案是,这取决于。
CSV非常适合某些用例。例如,作为大型数据集的“流”格式,流比XML / JSON更容易,并且CSV文件占用的存储空间少得多。我用它来传输千兆字节范围内的数据集,而其他格式则不可行。
在处理遗留系统和工作流时,在某些行业中也确实很常见。尝试将JSON导入MS Excel。
ODI最近对CSV进行了评论,称2014 年为“ CSV年”
对于“适当的” CSV格式,请考虑在HTTP响应中使用CSV MIME类型。
最肯定不是。
CSV是一种表格格式,可以很好地映射到数据集或其他表格数据。但是,并非所有数据都是表格格式的!通常,我们要序列化对象图。在以下情况下,这可能很困难:
我们还希望能够从存储格式中可靠地反序列化对象。
主要是一种可扩展的标记语言。它也可以用来存储常规数据结构。对ID的语言支持意味着可以创建复杂的图形,尽管最适合用于树。可以根据规范对文档进行正确性测试。这种格式存在很多问题,可能会使其变得不切实际,例如极端冗长。
主要是一种存储简单对象树的方法。不支持常规图。JSON 除了基本类型string,integer,float,boolean,null和集合类型array和object之外,没有其他类型的概念。
最容易理解为JSON的扩展。具有别名的概念,可以创建任意复杂度的对象图。具有元数据(如标签)的概念,可用于正确键入。
除了一个表外什么都没有。如果要存储对象图,则必须使用类似
#ID,Type,Field1,Field2,...,FieldN
1,String,foo
2,String,bar
3,Array<String>,1,2
CSV的许多方言在定界符,行终止符,引号,转义符以及许多其他问题上都存在分歧,这些问题使其不适用于常规(二进制)数据。所有这些使处理CSV数据变得相当困难。
因此,将CSV用作常规序列化格式时,从根本上讲,简单的事情很难或不可能实现。
当使用它存储真正的表格数据(如时间表或一系列测量值)时,此批评并不适用。在此,CSV(通常是制表符分隔值的变体)通常比其他数据格式更紧凑,更易于使用。
我还不得不说,这取决于您要实现的目标。对于许多问题,如果问题足够小并且您的选择与现有系统完全吻合,那么选择什么都无关紧要。
由于您引入了更多的复杂性并需要调试新的输入系统,因此采用旧系统并尝试采用新格式有时可能会遇到问题。当新人们更喜欢不同于现有内容的东西,或者出现一种新格式并且他们想尝试它时,我已经看到了很多。这可能不是一个好主意,这取决于具体情况。
几年前,我致力于研究图形数据库系统,该系统依赖于各种格式的CSV文件。CSV文件导入器将为我们构建图形,并且它已经完成了多年的调试和优化代码工作。它既快速又灵活,我们很乐意使用它引导大型研究项目。当XML出现在场景中时,我们添加了XML导入器,但这并不一定在速度或表示复杂性方面有所改进,并且在表示图结构方面,XML肯定没有比CSV更好。JSON比XML更好(更短),但在很多方面都相似,因此在该系统上创建新的导入程序时,我期望得到类似的结果。
在某个时间点,我们有一个客户以“ cobol”格式引入了大量数据,这些文件的行长可变,其中包含指示如何解释该行之后的字节的标记。它源于存储昂贵的时代,因此要求紧凑。我们通过即时将数据转换为CSV格式并将其馈入CSV导入器来导入数据。这很容易做到,并且减少了调试和维护的数量,这是一件好事。如果我们必须一直导入此类数据,则可能直接将其内置到系统中以获得性能和效率提高。
因此,这取决于您在做什么以及底层系统在做什么。在我的示例中,CSV导入器经过了精心设计和可靠的设计。我会毫不犹豫地告诉您,在不了解我要构建的其他层中正在发生什么的情况下,一种格式的好坏。我喜欢JSON并且比较喜欢它,但是我知道,鉴于某些复杂的数据结构和足够大的数据集,CSV文件也可以很好地工作。
没有。
CSV并不是真正的单一格式。野外的许多CSV文件都有多种样式用于转义,分隔符和其他格式问题。
如果您打算将其用作平面文件存储,那么使用JSON将为您提供更好的服务。JSON映射到对象或从对象映射出的麻烦要比将CSV粘贴的麻烦少得多。
我强烈建议不要这样做。我可能会在某个时候输出CSV(如果用户要求的话)。但这不适合用于存储/导入目的。这主要是由于“ CSV”定义不明确。“ C”表示“逗号”或“字符”是否分开?您如何处理包含转义字符(如“?”)的文本字符串,每个该死的CSV实现均以不同方式对待转义字符等,从而导致可以导出但不能导入的文件等。
Excel是一个很好的演示:在英语版本中,它使用“,”作为分隔符。在德国,它使用“;”。因此,德语版本会扼杀英语CSV文件,反之亦然...
它的主要优点是可读性强,不容小discount。但是我不会将其作为存储格式,因为它太脆弱了。如果必须为人类导出文件,则可以使用CSV,但即使如此,我仍会尝试使用写入xlsx文件的库(它们是免费提供的)。