序列化的不同格式:JSON、XML、TOML、CSON、YAML

前言

这篇文章参考于知乎,进行了一些总结。

正文

首先什么是序列化,数据序列化是从一个系统获取一些信息,将其转换为其它系统可以读取的格式,然后将其传递给其它系统的过程。也就是可以让不同系统“通信”。

序列化需要满足两个特点,一是易于人类读写,二是易于机器读写。但这两点很难同时满足,因为人类喜欢更具表现力的、松散的、灵活的格式标准,而机器倾向于被确切告知一切事情而且没有二义性和细节的缺失。

有很多种序列化的格式,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.99
  publish_date: '2008-05-01'
  description: 'Unearthing the Excellence in JavaScript'
]

YAML

YAML 综合了 CSON 和 JSON 的优点,语法简洁可读,数据类型支持齐全,兼容 JSON 的同时增加了更多功能特性。大多数流行语言都提供了解析 YAML 的库支持,因此 YAML 被看作未来主流的数据序列化格式。缺点是不同语言的 YAML 实现之间存在细微差异。

books:
  - id: bk102
    author: Crockford, Douglas
    title: 'JavaScript: The Good Parts'
    genre: Computer
    price: 29.99
    publish_date: !!str 2008-05-01
    description: Unearthing the Excellence in JavaScript

总结

总的来说,每种格式均有其独特的侧重点,根据不同的使用场景可以选择不同的格式。JSON 简洁通用,YAML 功能全面可读性强,XML啰嗦但自描述能力强,TOML 紧凑易用但缺乏支持,CSON 则过于语言绑定。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值