说说互联网产品的几种常见数据格式

2016/9/15

我问莫老师,你知道互联网产品都有哪些常见的数据格式吗?

莫老师问,你是说 Excel 吗?

答得不全对,但对于大多数普通用户来说,这已经是个相当不错的答案了。Excel 是微软 Office 套件中的一款电子表格产品,由于它的(盗版)普及率实在太高了,以致于很多人想到数据,首先就想到了 Excel。如果微软的 Office 今天是个刚刚推向市场的产品,大概也可能会使用一种滥大街的广告格式:Excel 就是数据软件。

我想说的重点不是 Excel,而是表格(Excel 只是表格型数据的一种形式)。表格是一种最直观的数据格式,由横纵交叉的线条将平面空间分成若干行若干列的整齐风格,每个格子中可以填写一些数据。比如这样:

你看,这就是数据。通常的表格数据,如果是在线版,会用 HTML 的 table 标签展示,如果是离线版,一般用 CSV 格式的文件存储。先说 table。

表格

表格是肉眼能够识别的最直观的数据格式。

HTML 中的 table 是这样的结构:

<table>
    <thead>
        <tr>
            <th>Head1</th>
            <th>Head2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Value1</td>
            <td>Value2</td>
        </tr>
        <tr>
            <td>Value3</td>
            <td>Value4</td>
        </tr>
    </tbody>
</table>

上面的代码翻译过来是这个样子:

Head1 Head2
Value1 Value2
Value3 Value4

Table 是 Web 前端使用最广泛的数据表达方式。大多数你在网上看到的表格形式的数据,都是用 Table 书写的。Table 也非常好用,你把一个网页上的表格从头到尾选中再复制,多数情况下都可以原样粘贴到 Excel 里。

CSV

CSV 是 Comma Separated Value 的简写,它是一种通用的格式(当我们说通用时,一般指的的兼容性,比如跨平台、跨软件,在任何操作系统上,用任何的表格软件都可以轻松打开)。

任何表格,本质上都是二维矩阵,如果不考虑单元格合并的话,一般都能够用 CSV 文件等价表示,这也是为什么许多数据产品支持的导出格式中都有 CSV 的原因。我们手写一个 CSV 试试:

a,b,c![](![](![](![]())))
d,e,f
h,i,j

这个 CSV 文件用 Excel 等工具打开时会看到这样:

a b C
d e f
h i j

当然 CSV 在使用中有很多局限。比如,CSV 使用了英文逗号作分隔符,那单元格内容中有英文逗号怎么办?于是有人想到,用英文双引号把单元格内容括起来。像这样:

"a,a","b","c"
...

但还是有问题,万一单元格内容中有双引号怎么办?于是又有人想到了转义,也有人想到了换个分隔符,比如 \t。但无论怎么转,单元格内的内容总有可能和分隔符冲突,所以这并不是一种非常完美的解决方案。很多互联网产品在导出 CSV 数据时,由于顾虑不周,经常会出现乱码或者串行的情况。

CSV 被看作是最标准最工整的格式,有成熟的处理方式、成熟的标准、成熟的软件支持。如果有人拿着 CSV 文件说做大数据分析,建议你呸它一脸,要是能处理成 CSV 这么工整的格式,基本上就算不上大数据了。

XML

与 CSV 类似的格式,有一种叫 XML。XML 是 Extensible Markup Language 的缩写,指的是一种可扩展的标记语言。如果不知道 XML,你可能知道跟它类似的一种标记语言叫 HTML,它们都是用尖角标签把内容包裹起来。XML 大致长这个样子:

XML 也是一种常用的数据格式,比如上边这张图就是 RSS 的格式,本质上就是一个 XML 文件。再比如 iTunes 播客的数据格式、微信公众号的自动回复的数据格式、SEO 中向搜索引擎提交网址的数据格式,都是 XML。

JSON

这些年来前后端分离的产品越来越多,很多产品都有了 RESTful API 设计,这样一来,JSON 就越来越重要。

JSON 是 JavaScript Object Notation 的缩写,可以理解成用 Javascript 的对象来表示一个数据。JSON 看起来是这样的:

[{
    "car": "BMW",
    "meta": {
        "price": 40000,
        "color": "blue"
    }
  }, {
    "car": "Benz",
    "meta": {
        "price": 35000,
        "color": "black"
    }
  }, {
    "car": "三蹦子",
    "meta": {
        "price": 6000,
        "color": "green"
    }
}]

JSON 是如今无处不见的数据格式(常见于前后端分享的设计,特别是移动端)。相比 CSV,它的功能更强大,更容易扩展。

小结

本文从 Excel 说起,讲了互联网产品常见的几种数据交换格式,包括直观可见的互联网表格、用 Excel 可以直接打开的 CSV、更像 HTML 的 XML、以及前后端分离的 API 数据格式 JSON,最后,我们留下一个小线索,供大家了解更多。

本来只想随便说几种数据格式,但说着说着,似乎到了数据交换格式的领域。

维基百科上把 Data exchange formats 分成两种类型,一种是人类可读的,一种是人类不可读的(计算机可读的二进制格式)。前边我们说到的几种类型,以人类可读为主。

这张表格把几种数据格式作了一下比较。

https://en.wikipedia.org/wiki/Data_exchange

获取更多数据及服务咨询,请关注微信公众号 toobigdata