Comparison of data serialization formats
| 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) |
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.
Overview
- 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]
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 |
1atruea
|
0afalsea
|
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:,a4:null,a
|
1:1,a4:true,a
|
1:0,a5: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"
|
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 | NILnil
|
T#tetrue
|
NIL#fefalse
|
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 |
yYyesYesYESonOnONtrueTrueTRUE[6]
|
nNnoNoNOoffOffOFFfalseFalseFALSE[6]
|
685230+685_230-685230024722560x_0A_74_AE0b1010_0111_0100_1010_1110190:20:30[7]
|
6.8523015e+5685.230_15e+03685_230.15190: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
|
<boolean val="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.
Comparison of binary formats
| Format | Null | Booleans | Integer | Floating-point | String | Array | Associative array/Object |
|---|---|---|---|---|---|---|---|
| ASN.1 | |||||||
| Netstrings | 0:,
|
True: 1:1,
False: |
|||||
| OGDL Binary | |||||||
| Property list (binary format) |
|||||||
| Protocol Buffers[9] | Variable encoding length signed 32-bit: varint encoding of "ZigZag"-encoded value (n << 1) XOR (n >> 31)
Variable encoding length signed 64-bit: "varint encoding of "ZigZag"-encoded |
floats: little-endian binary32 | UTF-8 encoded, preceded by varint-encoded integer length of string in bytes | ||||
| Thrift (protocol) |
Notes
- ↑ http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.text_format.html
- ↑ http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSPropertyList.html
- ↑ http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man5/plist.5.html
- ↑ http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFPropertyLists/Articles/XMLTags.html#//apple_ref/doc/uid/20001172-CJBEJBHH
- ↑ [{{Expansion depth limit exceeded||}} "Null Language-Independent Type for YAML™ Version 1.1"]. [{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}} |{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}} }}}} }} YAML.org]. 2005-01-18. {{Expansion depth limit exceeded||}}. Retrieved 2009-09-12.
- ↑ 6.0 6.1 [{{Expansion depth limit exceeded||}} "Boolean Language-Independent Type for YAML™ Version 1.1"]. [{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}} |{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}} }}}} }} YAML.org]. Clark C. Evans. 2005-01-18. {{Expansion depth limit exceeded||}}. Retrieved 2009-09-12.
- ↑ [{{Expansion depth limit exceeded||}} "Integer Language-Independent Type for YAML Version 1.1"]. [{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}} |{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}} }}}} }} YAML.org]. Clark C. Evans. 2005-02-11. {{Expansion depth limit exceeded||}}. Retrieved 2009-09-12.
- ↑ [{{Expansion depth limit exceeded||}} "Floating-Point Language-Independent Type for YAML™ Version 1.1"]. [{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}} |{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}} }}}} }} YAML.org]. Clark C. Evans. 2005-01-18. {{Expansion depth limit exceeded||}}. Retrieved 2009-09-12.
- ↑ http://code.google.com/apis/protocolbuffers/docs/encoding.html
References
If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...
- Pages where expansion depth is exceeded
- Pages with broken file links
- Articles needing additional references from August 2009
- Articles with invalid date parameter in template
- All articles needing additional references
- All pages needing factual verification
- Wikipedia articles needing factual verification from September 2009
- Data serialization formats
- Persistence