|
This article needs additional citations for verification. Please help improve this article by adding reliable references. Unsourced material may be challenged and removed. (August 2009) </td>
</tr>
</table>
This article is a comparison of data serialization formats, different ways to convert complex objects to sequences of bits. It does not include markup languages used exclusively as document file formats.
[edit] Overview
| Name
| Creator/Maintainer
| Based on
| Standardized?
| Specification
| Binary?
| Human-readable?
| Can store relational data?
| Schema?
| Standard APIs
|
| ASN.1
| ISO, IEC, ITU-T
| Template:N/a
| Yes
| ISO/IEC 8824; X.680 series of ITU-T Recommendations
| Yes
| Yes (XER)
| No
| Yes (built-in)
| No
|
| BSON
| MongoDB
| JSON
| Yes
| BSON Specification
| Yes
| No
| No
| No
| No
|
| Comma-separated values (CSV)
| RFC author: Yakov Shafranovich
| Template:N/a
| Partial (myriad informal variants used)
| RFC 4180 (among others)
| No
| Yes
| No
| No
| No
|
| JSON
| Douglas Crockford
| JavaScript syntax
| Yes
| RFC 4627
| No, but see BSON
| Yes
| No
| Partial (Kwalify, Rx, JSON Schema Proposal)
| No
|
| Netstrings
| Dan Bernstein
| Template:N/a
| Yes
| netstrings.txt
| Yes
| Yes
| No
| No
| No
|
| OGDL
| Rolf Veen
| ?
| Yes
| 1.0 Working draft
| Yes (Binary 1.0 Working draft)
| Yes
| Yes (Path 1.0 Working draft)
| Yes (Schema WD)
|
|
| Property list
| NeXT (creator) Apple (maintainer)
| ?
| Partial
| Public DTD for XML format
| Yesa
| Yesb
| No
| ?
| Cocoa, CoreFoundation, OpenStep, GnuStep
|
| Protocol Buffers
| Google
| Template:N/a
| Partial
| Developer Guide: Encoding
| Yes
| Partiald
| No
| Yes (built-in)
|
|
| S-expressions
| Internet Draft author: Ron Rivest
| Lisp, Netstrings
| Partial (largely de facto)
| "S-Expressions" Internet Draft
| No
| Yes
| No
| No
|
|
| Thrift
| Facebook (creator) Apache (maintainer)
| Template:N/a
| No
| Original whitepaper
| Yes
| Partialc
| No
| Yes (built-in)
|
| eXternal Data Representation
| IETF
| Template:N/a
| Yes
| RFC 4506
| Yes
| ?
| ?
| Yes
| ?
|
| XML
| W3C
| SGML
| Yes
| W3C Recommendations: 1.0 (Fifth Edition) 1.1 (Second Edition)
| Partial (Binary XML)
| Yes
| Yes (XPointer, XPath)
| Yes (XML schema)
| DOM, SAX, XQuery, XPath
|
| YAML
| Clark Evans, Ingy döt Net, and Oren Ben-Kiki
| XML, C, Python, Perl, Email
| Yes
| Version 1.2
| No
| Yes
| Yes
| Partial (Kwalify, Rx), (built-in language type-defs)
| No
|
- a. ^ The current default format is binary.
- b. ^ The "classic" format is plain text, and an XML format is also supported.
- c. ^ Theoretically possible due to abstraction, but no implementation is included.
- d. ^ The primary format is binary but a text format is available.[1]
[edit] Syntax comparison of human-readable formats
| Format
| Null
| Boolean true
| Boolean false
| Integer
| Floating-point
| String
| Array
| Associative array/Object
|
| CSVb
| nulla (or an empty element in the row)a
| 1a
truea
| 0a
falsea
| 685230
-685230a
| 6.8523015e+5a
| A to Z
"We said, ""no""."
| true,,-42.1e7,"A to Z"
| 42,1
A to Z,1,2,3
|
| Netstringsc
| 0:,a
4:null,a
| 1:1,a
4:true,a
| 1:0,a
5:false,a
| 6:685230,a
| 9:6.8523e+5,a
| 6:A to Z,
| 29:4:true,0:,7:-42.1e7,6:A to Z,,
| 41:9:2:42,1:1,,25:6:A to Z,12:1:1,1:2,1:3,,,,a
|
| JSON
| null
| true
| false
| 685230
-685230
| 6.8523015e+5
| "A to Z"
| [true, null, -42.1e7, "A to Z"]
| {42: true, "A to Z": [1, 2, 3]}
|
| OGDL[verification needed]
| nulla
| truea
| falsea
| 685230a
| 6.8523015e+5a
| "A to Z"
'A to Z'
NoSpaces
| true
null
-42.1e7
"A to Z"
(true, null, -42.1e7, "A to Z")
| 42
true
"A to Z"
1
2
3
42
true
"A to Z", (1, 2, 3)
|
Property list (plain text format)[2]
| Template:N/a
| <*BY>
| <*BN>
| <*I685230>
| <*R6.8523015e+5>
| "A to Z"
| ( <*BY>, <*R-42.1e7>, "A to Z" )
| {
"42" = <*BY>;
"A to Z" = ( <*I1>, <*I2>, <*I3> );
}
|
Property list (XML format)[3][4]
| Template:N/a
| <true />
| <false />
| <integer>685230</integer>
| <real>6.8523015e+5</real>
| <string>A to Z</string>
| <array>
<true />
<real>-42.1e7</real>
<string>A to Z</string>
</array>
| <dict>
<key>42</key>
<true />
<key>A to Z</key>
<array>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
</array>
</dict>
|
| S-expressions
| NIL
nil
| T
#te
true
| NIL
#fe
false
| 685230
| 6.8523015e+5
| abc
"abc"
#616263#
3:abc
{MzphYmM=}
|YWJj|
| (T, NIL, -42.1e7, "A to Z")
| ((42 T) ("A to Z" (1 2 3)))
|
| YAML
| ~
null<code> <code>Null
NULL[5]
| y
Y
yes
Yes
YES
on
On
ON
true
True
TRUE[6]
| n
N
no
No
NO
off
Off
OFF
false
False
FALSE[6]
| 685230
+685_230
-685230
02472256
0x_0A_74_AE
0b1010_0111_0100_1010_1110
190:20:30[7]
| 6.8523015e+5
685.230_15e+03
685_230.15
190:20:30.15
.inf
-.inf
.Inf
.INF
.NaN
.nan
.NAN[8]
| A to Z
"A to Z"
'A to Z'
| [y, ~, -42.1e7, "A to Z"]
- y
-
- -42.1e7
- A to Z
| {"John":3.14, "Jane":2.718}
42: y
A to Z: [1, 2, 3]
|
| XMLd
| <null />a
| <boolean val="true"/>a
<true />a
| <boolean val="false"/>a
<false />a
| <integer>685230</integer>a
| <float>6.8523015e+5</float>a
| A to Z
| a<array>
<element type="boolean">true</element>
<element type="null"/>
<element type="float">-42.1e7</element>
<element type="string">A to Z</element>
</array>
| a<associative-array>
<entry>
<key type="integer">42</key>
<value type="boolean">true</value>
</entry>
<entry>
<key type="string">A to Z</key>
<value>
<array>
<element type="integer" val="1"/>
<element type="integer" val="2"/>
<element type="integer" val="3"/>
<array>
</value>
</entry>
</associative-array>
|
- a. ^ One possible encoding; the specification document does not specifically give an encoding for this datatype.
- b. ^ The RFC CSV specification only deals with delimiters, newlines, and quote characters; it does not directly deal with serializing programming data structures.
- c. ^ The netstrings specification only deals with nested byte strings; anything else is outside the scope of the specification.
- d. ^ XML in and of itself is not a data serialization language, but many data serialization formats have been derived from it; as such, there are many different ways, in addition to those shown, to serialize programming data structures into XML.
- e. ^ This syntax is not compatible with the Internet-Draft, but is used by some dialects of Lisp.
[edit] Comparison of binary formats
[edit] References
|