前言
這篇文章參考于知乎,進行了一些總結。
正文
首先什么是序列化,數據序列化是從一個系統獲取一些信息,將其轉換為其它系統可以讀取的格式,然后將其傳遞給其它系統的過程。也就是可以讓不同系統“通信”。
序列化需要滿足兩個特點,一是易于人類讀寫,二是易于機器讀寫。但這兩點很難同時滿足,因為人類喜歡更具表現力的、松散的、靈活的格式標準,而機器傾向于被確切告知一切事情而且沒有二義性和細節的缺失。
有很多種序列化的格式,JSON、XML、TOML、CSON、YAML等,當然這些在傳輸的過程中還是要轉換成二進制的,它們只是兩個系統間通信的標準,能夠互相讀取。下面對它們分別進行簡單的說明。
XML
雖然易于人類閱讀和編寫,但 XML 過于冗長和啰嗦,包含很多不必要的語法。即使對計算機解析也是一個負擔,因為需要處理各種邊緣情況。如今除了 HTML/SVG 等特定場景,XML 在 Web 數據交換中的使用已經不多。
<book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications with XML.</description>
</book>
JSON
JSON 其簡潔的語法,不僅易于計算機解析,也相對人類可讀。并且允許表示所有基本數據類型,并且可以嵌套表示復雜的數據結構。如今幾乎所有編程語言都內置解析它的功能,幾乎用在了任何地方。
{"books": [{"id": "bk102","author": "Crockford, Douglas","title": "JavaScript: The Good Parts", "genre": "Computer","price": 29.99,"publish_date": "2008-05-01","description": "Unearthing the Excellence in JavaScript"}]
}
TOML
TOML 的語法類似 Windows 的 INI 文件,看起來比 JSON 更加緊湊。它引入了表擴展等語法糖使嵌套數據結構更容易表示。TOML也內置了日期時間等數據類型的支持。缺點是目前語言支持庫還比較欠缺,不過Rust是支持的。
[[books]]
id = 'bk101'
author = 'Crockford, Douglas'
title = 'JavaScript: The Good Parts'
genre = 'Computer'
price = 29.99
publish_date = 2008-05-01T00:00:00+00:00
description = 'Unearthing the Excellence in JavaScript'
CSON
CSON 本質上是去掉了 JSON 的大括號,使用縮進層級的語法變體。它來自于 CoffeeScript,目的是與 CoffeeScript 語言協同簡化編程。但這也注定了 CSON 只能在 CoffeeScript 環境使用,通用性不高。
books: [id: 'bk102'author: 'Crockford, Douglas'title: 'JavaScript: The Good Parts'genre: 'Computer'price: 29.99publish_date: '2008-05-01'description: 'Unearthing the Excellence in JavaScript'
]
YAML
YAML 綜合了 CSON 和 JSON 的優點,語法簡潔可讀,數據類型支持齊全,兼容 JSON 的同時增加了更多功能特性。大多數流行語言都提供了解析 YAML 的庫支持,因此 YAML 被看作未來主流的數據序列化格式。缺點是不同語言的 YAML 實現之間存在細微差異。
books:- id: bk102author: Crockford, Douglastitle: 'JavaScript: The Good Parts'genre: Computerprice: 29.99publish_date: !!str 2008-05-01description: Unearthing the Excellence in JavaScript
總結
總的來說,每種格式均有其獨特的側重點,根據不同的使用場景可以選擇不同的格式。JSON 簡潔通用,YAML 功能全面可讀性強,XML啰嗦但自描述能力強,TOML 緊湊易用但缺乏支持,CSON 則過于語言綁定。