JSON、XML

简介

比较简单,格式不做介绍。

这几种格式有很明显的特点: 可阅读性好、低效、schema-less。 尤其是 JSON 更是因为JS亲儿子的身份在 HTTP 界经久不衰。

  • 很适合于序列化配置等小数据量,对于大数据量的情况,通常并不是好的选择。
  • 格式易于阅读,甚至还能添加注释。
  • 对开发友好,入门0门槛。
  • 具有卓越的跨语言跨平台性。具有基本的字符串操作的编程语言都能解析。
  • schema-less 格式非常灵活,能够存储非结构化文档。

对 Json 的思考

Json 的应用太广泛,已经无法单纯理解为一个序列化格式了,这也导致 Json 使用过程中的一些争论。 从序列化角度去理解 Json,也许也能理解其中的设计:

Key 只能是 string

文档可以理解为 class、object, key 则对应了 property。 即 Key 仅能作为字段的描述。

利用 key 存放数据, 是一种不合理的行为(虽然技术上是合法的)。

MessagePack 等框架中也明确规定 key 只能是 string,这样的设计并非技术上无法实现。 而是因为当一种序列化格式支持复杂类型作为 key 的时候,结构就从 class 退化成了普通 Map 。 在对象的序列化场景下有很大的限制。

注意: yaml 支持复杂类型作为 key。

Key 的 Unique 语义

Json 的 key 带有 unique 语义, 这也是另一个容易误用的特性。 这种特性是因为 class 的 property 无法重名。

正常情况下不应该利用这种语义来达到去重的目的,而是在业务层做去重。

仅支持有限类型

Json 是 JS 子集, 不是 JS 。 这种限制带来的好处也很大: 实现简单,不确定性小。

注意: yaml 支持通过 !! 扩充为任意类型