各种数据序列化格式进行比较。基本上,是回答以下问题:“能找到比JSON更好的东西吗?”。 这里找的是用于数据序列化的语言,而不是配置文件。
有两个轴线来比较各种语言:
即,是否在接收程序检查的单独文件(架构)中定义了结构的类型信息,或者消息本身是否包含类型信息。这有点类似于静态和动态类型的编程语言之间的差异。像编程语言一样,两者都有优点和缺点,但两者都不总是比对方好。这里不会真正比较工具的高低。目的是查看格式的内在特性。
不要与RPC协议混淆,尽管其中许多东西都在RPC协议中使用。无论是否以这种方式实现,HTTP / REST接口通常只是一种RPC协议。
http://json.org/
我们都知道JSON,都同意它足够好。
类别:易于理解,自我描述。尽管用于RPC协议的描述词汇表存在(https://json-schema.org/),但是似乎很少使用。
用户:每个人
优点:
缺点:
https://yaml.org/
最初是XML的一种更简单的替代品。
类别:易于理解,自我描述。
用户:很多人
优点:
缺点:
https://zh.wikipedia.org/wiki/XML
W3C的标准。
类别:人类可读的,具有常见模式用法的自我描述。具有RPC协议和许多其他复杂的东西。
用户:每个无法避免的人。
优点:
缺点:
https://developers.google.com/protocol-buffers/
a.k.a协议buffer,但这是一个很别扭的名字。Google的常用快速在线序列化格式。
类别:机器可读的,模式定义的。有围绕它构建的RPC协议。
用户: Google,基本上每个人
优点:
缺点:
https://capnproto.org/
其他二进制序列化协议。
类别:机器可读的,模式定义的。主要是为RPC设计的。
用户: sandstorm.io,Cloudflare ?其他各种人,但似乎人数不多
优点:
缺点:
https://thrift.apache.org/
Apache的Protobuf版本。有人实际使用吗?显然,Facebook是因为他们发明了它,然后将其提供给了Apache。还有谁?
类别:机器可读的,模式定义的。主要为RPC设计。
用户:基本上主要是Facebook?Twitter和AirBNB显然也使用它,也不是不受欢迎。
优点:
缺点:
https://google.github.io/flatbuffers/
感觉有点像Google的Cap'n Proto,因为它具有一些相同的设计目标-零副本序列化和布局更适合版本控制。
类别:机器可读的,模式定义的。包括RPC协议。
用户: Google,Cocos2D,Facebook的移动客户端
优点:
缺点:
https://cbor.io/
基本上是对JSON的二进制重新构想。
类别:机器可读的,自我描述的。
用户: ???
优点:
缺点:
https://msgpack.org/
CBOR是从msgpack派生的。设计简单紧凑。
类别:机器可读的,自我描述的。
用户: Redis,还有其他几个吗?
优点:
缺点:
http://bsonspec.org/
顾名思义,JSON的二进制形式。由MongoDB创建为其内部数据格式。
类别:机器可读的,自我描述的。
用户: MongoDB
优点:
缺点:
有趣但实际上不在序列化语言范围之内的语言。
https://github.com/toml-lang/toml
它被设计为配置语言,而不是序列化格式。从根本上讲,这是一种使像Windows .INI文件那样简单和普遍存在的尝试,而这实际上是一种规范,而不是一种流行语言。
类别:易于理解的分类,虽然通常要尝试使用特定的数据结构,但它还是可以自我描述的。
用户:各种,尤其是cargo(Rust的构建工具)
优点:
缺点:
https://github.com/ron-rs/ron
Rust的对象符号。因为将Rust的ML-y类型系统导入JSON并不是一件很有趣的事情。为此目的,其效果惊人,但基本上在其他地方都没有尝试过。
类别:易于理解的分类,虽然通常要尝试使用特定的数据结构,但它还是可以自我描述的。
用户:少数,尤其是Amethyst.rs
优点:
缺点:
https://github.com/servo/bincode
主要包括完整性。它不是在不能保证稳定性的单个特定实现之外进行标准化的,因此不适用于通用用途。它旨在用作Servo的快速简便的RPC / IPC格式,而实际格式基本上是该目标的实现细节。
用户:服务器,是由内向的人编写的程序,他们并不关心彼此之间的交谈。
优点:
缺点:
https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
一些愚蠢的电信标准组织试图做protobuf以后会做的事情。问题的标准机构与创造了一种故意的现实幻觉的机构-OSI网络模型有关。
类别:机器可读的,模式定义的。
用户:LDAP和SSL证书。
优点:
缺点:
https://tools.ietf.org/html/rfc4506
Sun Microsystems尝试做protobuf以后会做的事情。
基本上,一个非常出色的C编码器并想要通过网络传输结构化数据时,会想到的事情。
类别:机器可读的,模式定义的。
用户:仍在某些地方使用,例如ZFS,NFS等
优点:
缺点:
Lisp代码是由什么组成的,是从更文明的时代开始的一种优雅的表示法。像许多Lisp解决方案一样,它非常有效,直到需要使两个Lisp实现使用同一类东西为止。至少从1970年代开始,就一直没有尝试过在Lisp之外流行。
没有实际的通用规范,更不用说实现了。EDN是一个不错的开始。
类别:易于理解,自我描述
用户:任何类似Lisp的语言,主要的“实际例子”是Scheme,Racket,Clojure和理论上常见的Lisp。
优点:
缺点:
够好了:
避免:
这实际上是一个有趣的原因,因为很容易跟踪每种格式,ASN.1,XDR和都早于当前的互联网时代。现代始于XML。XML有很长的一段历史,但是却形成了一个瓶颈。人们实际上关心的大多数事物都是对XML的响应,因此这就是开始的地方。最广泛使用的事物的家谱将是:
因此,当实际查看此列表时,实际上并没有JSON的替代品。没有比“人类可读”列更好的了。哦,有很多尝试过的方法,例如:
…但是这些几乎没有更新最新版本,更不用说广泛使用了。由于JSON5最接近其前身,因此它可能最接近。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。