Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Comparison of data-serialization formats
List article

This is a comparison of data serialization formats, various ways to convert complex objects to sequences of bits. It does not include markup languages used exclusively as document file formats.

Overview

NameCreator-maintainerBased onStandardized?SpecificationBinary?Human-readable?Supports references?eSchema-IDL?Standard APIsSupports zero-copy operations
Apache ArrowApache Software FoundationDe factoArrow Columnar FormatYesNoYesBuilt-inC, C++, C#, Go, Java, JavaScript, Julia, Matlab, Python, R, Ruby, Rust, SwiftYes
Apache AvroApache Software FoundationNoApache Avro™ SpecificationYesPartialgBuilt-inC, C#, C++, Java, PHP, Python, Ruby
Apache ParquetApache Software FoundationNoApache ParquetYesNoNoJava, Python, C++No
Apache ThriftFacebook (creator)Apache (maintainer)NoOriginal whitepaperYesPartialcNoBuilt-inC++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi and other languages1
ASN.1ISO, IEC, ITU-TYesISO/IEC 8824 / ITU-T X.680 (syntax) and ISO/IEC 8825 / ITU-T X.690 (encoding rules) series. X.680, X.681, and X.683 define syntax and semantics.BER, DER, PER, OER, or custom via ECNXER, JER, GSER, or custom via ECNYesfBuilt-inOER
BencodeBram Cohen (creator)BitTorrent, Inc. (maintainer)De facto as BEPPart of BitTorrent protocol specificationExcept numbers and delimiters, being ASCIINoNoNoNoNo
BSONMongoDBJSONNoBSON SpecificationYesNoNoNoNoNo
Cap'n ProtoKenton VardaNoCap'n Proto Encoding SpecYesPartialhNoYesNoYes
CBORCarsten Bormann, P. HoffmanMessagePack2YesRFC 8949YesNoYes, through taggingCDDLFIDO2No
Comma-separated values (CSV)RFC author:Yakov ShafranovichMyriad informal variantsRFC 4180(among others)NoYesNoNoNoNo
Common Data Representation (CDR)Object Management GroupYesGeneral Inter-ORB ProtocolYesNoYesYesAda, C, C++, Java, Cobol, Lisp, Python, Ruby, Smalltalk
D-Bus Message Protocolfreedesktop.orgYesD-Bus SpecificationYesNoNoPartial(Signature strings)Yes
Efficient XML Interchange (EXI)W3CXML, Efficient XMLYesEfficient XML Interchange (EXI) Format 1.0YesXMLXPointer, XPathXML SchemaDOM, SAX, StAX, XQuery, XPath
Extensible Data Notation (edn)Rich Hickey / Clojure communityClojureYesOfficial edn specNoYesNoNoClojure, Ruby, Go, C++, Javascript, Java, CLR, ObjC, Python3No
FlatBuffersGoogleNoFlatbuffers GitHubYesApache ArrowPartial(internal to the buffer)YesC++, Java, C#, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScriptYes
Fast InfosetISO, IEC, ITU-TXMLYesITU-T X.891 and ISO/IEC 24824-1:2007YesNoXPointer, XPathXML schemaDOM, SAX, XQuery, XPath
FHIRHealth Level 7REST basicsYesFast Healthcare Interoperability ResourcesYesYesYesYesHapi for FHIR4 JSON, XML, TurtleNo
IonAmazonJSONNoThe Amazon Ion SpecificationYesYesNoIon schemaC, C#, Go, Java, JavaScript, Python, Rust
Java serializationOracle CorporationYesJava Object SerializationYesNoYesNoYes
JSONDouglas CrockfordJavaScript syntaxYesSTD 90/RFC 8259(ancillary:RFC 6901,RFC 6902), ECMA-404, ISO/IEC 21778:2017No, but see BSON, Smile, UBJSONYesJSON Pointer (RFC 6901), or alternately, JSONPath, JPath, JSPON, json:select(); and JSON-LDPartial(JSON Schema Proposal, ASN.1 with JER, Kwalify Archived 2021-08-12 at the Wayback Machine, Rx, JSON-LDPartial(Clarinet, JSONQuery / RQL, JSONPath), JSON-LDNo
MessagePackSadayuki FuruhashiJSON (loosely)NoMessagePack format specificationYesNoNoNoNoYes
NetstringsDan BernsteinNonetstrings.txtExcept ASCII delimitersYesNoNoNoYes
OGDLRolf Veen?NoSpecificationBinary specificationYesPath specificationSchema WD
OPC-UA BinaryOPC FoundationNoopcfoundation.orgYesNoYesNoNo
OpenDDLEric LengyelC, PHPNoOpenDDL.orgNoYesYesNoOpenDDL library
PHP serialization formatPHP GroupYesNoYesYesYesNoYes
Pickle (Python)Guido van RossumPythonDe facto as PEPsPEP 3154 – Pickle protocol version 4YesNoYes5NoYesNo
Property listNeXT (creator)Apple (maintainer)?PartialPublic DTD for XML formatYesaYesbNo?Cocoa, CoreFoundation, OpenStep, GnuStepNo
Protocol Buffers (protobuf)GoogleNoDeveloper Guide: Encoding, proto2 specification, and proto3 specificationYesYesdNoBuilt-inC++, Java, C#, Python, Go, Ruby, Objective-C, C, Dart, Perl, PHP, R, Rust, Scala, Swift, Julia, Erlang, D, Haskell, ActionScript, Delphi, Elixir, Elm, Erlang, GopherJS, Haskell, Haxe, JavaScript, Kotlin, Lua, Matlab, Mercurt, OCaml, Prolog, Solidity, Typescript, Vala, Visual BasicNo
S-expressionsJohn McCarthy (original)Ron Rivest (internet draft)Lisp, NetstringsLargely de facto"S-Expressions" Archived 2013-10-07 at the Wayback Machine Internet DraftYes, canonical representationYes, advanced transport representationNoNo
SmileTatu SalorantaJSONNoSmile Format SpecificationYesNoYesPartial(JSON Schema Proposal, other JSON schemas/IDLs)Partial(via JSON APIs implemented with Smile backend, on Jackson, Python)
SOAPW3CXMLYesW3C Recommendations:SOAP/1.1SOAP/1.2Partial(Efficient XML Interchange, Binary XML, Fast Infoset, MTOM, XSD base64 data)YesBuilt-in id/ref, XPointer, XPathWSDL, XML schemaDOM, SAX, XQuery, XPath
Structured Data eXchange FormatsMax WildgrubeYesRFC 3072YesNoNoNo
UBJSONThe Buzz Media, LLCJSON, BSONNoubjson.orgYesNoNoNoNo
eXternal Data Representation (XDR)Sun Microsystems (creator)IETF (maintainer)YesSTD 67/RFC 4506YesNoYesYesYes
XMLW3CSGMLYesW3C Recommendations:1.0 (Fifth Edition)1.1 (Second Edition)Partial(Efficient XML Interchange, Binary XML, Fast Infoset, XSD base64 data)YesXPointer, XPathXML schema, RELAX NGDOM, SAX, XQuery, XPath
XML-RPCDave Winer6XMLNoXML-RPC SpecificationNoYesNoNoNoNo
YAMLClark Evans,Ingy döt Net,and Oren Ben-KikiC, Java, Perl, Python, Ruby, Email, HTML, MIME, URI, XML, SAX, SOAP, JSON7NoVersion 1.2NoYesYesPartial(Kwalify Archived 2021-08-12 at the Wayback Machine, Rx, built-in language type-defs)NoNo
NameCreator-maintainerBased onStandardized?SpecificationBinary?Human-readable?Supports references?eSchema-IDL?Standard APIsSupports zero-copy operations
  1. ^ The current default format is binary.
  2. ^ The "classic" format is plain text, and an XML format is also supported.
  3. ^ Theoretically possible due to abstraction, but no implementation is included.
  4. ^ The primary format is binary, but text and JSON formats are available.89
  5. ^ Means that generic tools/libraries know how to encode, decode, and dereference a reference to another piece of data in the same document. A tool may require the IDL file, but no more. Excludes custom, non-standardized referencing techniques.
  6. ^ ASN.1 has X.681 (Information Object System), X.682 (Constraints), and X.683 (Parameterization) that allow for the precise specification of open types where the types of values can be identified by integers, by OIDs, etc. OIDs are a standard format for globally unique identifiers, as well as a standard notation ("absolute reference") for referencing a component of a value. For example, PKIX uses such notation in RFC 5912. With such notation (constraints on parameterized types using information object sets), generic ASN.1 tools/libraries can automatically encode/decode/resolve references within a document.
  7. ^ The primary format is binary, a json encoder is available.10
  8. ^ The primary format is binary, but a text format is available.

Syntax comparison of human-readable formats

FormatNullBoolean trueBoolean falseIntegerFloating-pointStringArrayAssociative array/Object
ASN.1(XML Encoding Rules)<foo /><foo>true</foo><foo>false</foo><foo>685230</foo><foo>6.8523015e+5</foo><foo>A to Z</foo><SeqOfUnrelatedDatatypes> <isMarried>true</isMarried> <hobby /> <velocity>-42.1e7</velocity> <bookname>A to Z</bookname> <bookname>We said, "no".</bookname></SeqOfUnrelatedDatatypes>An object (the key is a field name): <person> <isMarried>true</isMarried> <hobby /> <height>1.85</height> <name>Bob Peterson</name></person>

A data mapping (the key is a data value):

<competition> <measurement> <name>John</name> <height>3.14</height> </measurement> <measurement> <name>Jane</name> <height>2.718</height> </measurement></competition>

a

CSVbnulla(or an empty element in the row)a1atruea0afalsea685230-685230a6.8523015e+5aA to Z"We said, ""no""."true,,-42.1e7,"A to Z"42,1A to Z,1,2,3
ednniltruefalse685230-6852306.8523015e+5"A to Z", "A \"up to\" Z"[true nil -42.1e7 "A to Z"]{:kw 1, "42" true, "A to Z" [1 2 3]}
FormatNullBoolean trueBoolean falseIntegerFloating-pointStringArrayAssociative array/Object
Ion

nullnull.nullnull.boolnull.intnull.floatnull.decimalnull.timestampnull.stringnull.symbolnull.blobnull.clobnull.structnull.listnull.sexp

truefalse685230-6852300xA74AE0b1110100101011106.8523015e5"A to Z"'''A to Z'''[true, null, -42.1e7, "A to Z"]{'42': true, 'A to Z': [1, 2, 3]}
Netstringsc0:,a4:null,a1:1,a4:true,a1:0,a5:false,a6:685230,a9:6.8523e+5,a6: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
JSONnulltruefalse685230-6852306.8523015e+5"A to Z"[true, null, -42.1e7, "A to Z"]{"42": true, "A to Z": [1, 2, 3]}
OGDL[verification needed]nullatrueafalsea685230a6.8523015e+5a"A to Z"'A to Z'NoSpacestruenull-42.1e7"A to Z"

(true, null, -42.1e7, "A to Z")

42 true"A to Z" 1 2 342 true"A to Z", (1, 2, 3)
FormatNullBoolean trueBoolean falseIntegerFloating-pointStringArrayAssociative array/Object
OpenDDLref {null}bool {true}bool {false}int32 {685230}int32 {0x74AE}int32 {0b111010010101110}float {6.8523015e+5}string {"A to Z"}Homogeneous array:int32 {1, 2, 3, 4, 5}

Heterogeneous array:

array{ bool {true} ref {null} float {-42.1e7} string {"A to Z"}}
dict{ value (key = "42") {bool {true}} value (key = "A to Z") {int32 {1, 2, 3}}}
PHP serialization formatN;b:1;b:0;i:685230;i:-685230;d:685230.15;dd:INF;d:-INF;d:NAN;s:6:"A to Z";a:4:{i:0;b:1;i:1;N;i:2;d:-421000000;i:3;s:6:"A to Z";}Associative array:a:2:{i:42;b:1;s:6:"A to Z";a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}}Object:O:8:"stdClass":2:{s:4:"John";d:3.14;s:4:"Jane";d:2.718;}d
Pickle (Python)N.I01\n.I00\n.I685230\n.F685230.15\n.S'A to Z'\n.(lI01\na(laF-421000000.0\naS'A to Z'\na.(dI42\nI01\nsS'A to Z'\n(lI1\naI2\naI3\nas.
Property list(plain text format)11<*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)12<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>
Protocol Bufferstruefalse685230-68523020.0855369"A to Z""sdfff2 \000\001\002\377\376\375""q\tqq<>q2&\001\377"field1: "value1"field1: "value2"field1: "value3anotherfield { foo: 123 bar: 456}anotherfield { foo: 222 bar: 333}thing1: "blahblah"thing2: 18923743thing3: -44thing4 { submessage_field1: "foo" submessage_field2: false}enumeratedThing: SomeEnumeratedValuething5: 123.456[extensionFieldFoo]: "etc"[extensionFieldThatIsAnEnum]: EnumValue
FormatNullBoolean trueBoolean falseIntegerFloating-pointStringArrayAssociative array/Object
S-expressionsNILnilT#tftrueNIL#fffalse6852306.8523015e+5abc"abc"#616263#3:abc{MzphYmM=}|YWJj|(T NIL -42.1e7 "A to Z")((42 T) ("A to Z" (1 2 3)))
YAML~nullNullNULL13yYyesYesYESonOnONtrueTrueTRUE14nNnoNoNOoffOffOFFfalseFalseFALSE15685230+685_230-685230024722560x_0A_74_AE0b1010_0111_0100_1010_1110190:20:30166.8523015e+5685.230_15e+03685_230.15190:20:30.15.inf-.inf.Inf.INF.NaN.nan.NAN17A 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: yA to Z: [1, 2, 3]
XMLe and SOAP<null />atruefalse6852306.8523015e+5A to Z<item>true</item><item xsi:nil="true"/><item>-42.1e7</item><item>A to Z<item><map> <entry key="42">true</entry> <entry key="A to Z"> <item val="1"/> <item val="2"/> <item val="3"/> </entry></map>
XML-RPC<value><boolean>1</boolean></value><value><boolean>0</boolean></value><value><int>685230</int></value><value><double>6.8523015e+5</double></value><value><string>A to Z</string></value><value><array> <data> <value><boolean>1</boolean></value> <value><double>-42.1e7</double></value> <value><string>A to Z</string></value> </data> </array></value><value><struct> <member> <name>42</name> <value><boolean>1</boolean></value> </member> <member> <name>A to Z</name> <value> <array> <data> <value><int>1</int></value> <value><int>2</int></value> <value><int>3</int></value> </data> </array> </value> </member></struct>
  1. ^ Omitted XML elements are commonly decoded by XML data binding tools as NULLs. Shown here is another possible encoding; XML schema does not define an encoding for this datatype.
  2. ^ The RFC CSV specification only deals with delimiters, newlines, and quote characters; it does not directly deal with serializing programming data structures.
  3. ^ The netstrings specification only deals with nested byte strings; anything else is outside the scope of the specification.
  4. ^ PHP will unserialize any floating-point number correctly, but will serialize them to their full decimal expansion. For example, 3.14 will be serialized to 3.140000000000000124344978758017532527446746826171875.
  5. ^ XML data bindings and SOAP serialization tools provide type-safe XML serialization of programming data structures into XML. Shown are XML values that can be placed in XML elements and attributes.
  6. ^ This syntax is not compatible with the Internet-Draft, but is used by some dialects of Lisp.

Comparison of binary formats

FormatNullBooleansIntegerFloating-pointStringArrayAssociative array/object
ASN.1(BER, PER or OER encoding)NULL typeBOOLEAN:
  • BER: as 1 byte in binary form;
  • PER: as 1 bit;
  • OER: as 1 byte
INTEGER:
  • BER: variable-length big-endian binary representation (up to 221024 bits);
  • PER Unaligned: a fixed number of bits if the integer type has a finite range; a variable number of bits otherwise;
  • PER Aligned: a fixed number of bits if the integer type has a finite range and the size of the range is less than 65536; a variable number of octets otherwise;
  • OER: 1, 2, or 4 octets (either signed or unsigned) if the integer type has a finite range that fits in that number of octets; a variable number of octets otherwise
REAL:
  • base-10 real values are represented as character strings in ISO 6093 format;
  • binary real values are represented in a binary format that includes the mantissa, the base (2, 8, or 16), and the exponent;
  • the special values NaN, -INF, +INF, and negative zero are also supported
Multiple valid types (VisibleString, PrintableString, GeneralString, UniversalString, UTF8String)Data specifications SET OF (unordered) and SEQUENCE OF (guaranteed order)User definable type
BSON\x0A(1 byte)True: \x08\x01False: \x08\x00(2 bytes)int32: 32-bit little-endian 2's complement or int64: 64-bit little-endian 2's complementDouble: little-endian binary64UTF-8-encoded, preceded by int32-encoded string length in bytesBSON embedded document with numeric keysBSON embedded document
Concise Binary Object Representation (CBOR)\xf6(1 byte)
  • True: \xf5
  • False: \xf4

(1 byte)

  • Small positive/negative \x00–\x17 & \x20–\x37 (1 byte)
  • 8-bit: positive \x18, negative \x38 (+ 1 byte)
  • 16-bit: positive \x19, negative \x39 (+ 2 bytes)
  • 32-bit: positive \x1A, negative \x3A (+ 4 bytes)
  • 64-bit: positive \x1B, negative \x3B (+ 8 bytes)
  • Negative x encoded as (−x − 1)
  • IEEE half/single/double \xf9–\xfb (+ 2–8 bytes)
  • Decimals and bigfloats (4+ bytes) encoded as \xc4 tag + 2-item array of integer mantissa & exponent
  • Length and content (1–9 bytes overhead)
  • Bytestring \x40–\x5f
  • UTF-8 \x60–\x7f
  • Indefinite partial strings \x5f and \x7f stitched together until \xff.
  • Length and items \x80–\x9e
  • Indefinite list \x9f terminated by \xff entry.
  • Length (in pairs) and items \xa0–\xbe
  • Indefinite map \xbf terminated by \xff key.
Efficient XML Interchange (EXI)18

(Unpreserved lexical values format)

xsi:nil is not allowed in binary context.1–2 bit integer interpreted as boolean.Boolean sign, plus arbitrary length 7-bit octets, parsed until most-significant bit is 0, in little-endian. The schema can set the zero-point to any arbitrary number.

Unsigned skips the boolean flag.

  • Float: integer mantissa and integer exponent.
  • Decimal: boolean sign, integer whole value, integer fractional.
Length prefixed integer-encoded Unicode. Integers may represent enumerations or string table entries instead.Length prefixed set of items.Not in protocol.
FlatBuffersEncoded as absence of field in parent object
  • True: \x01
  • False: \x00

(1 byte)

Little-endian 2's complement signed and unsigned 8/16/32/64 bitsUTF-8-encoded, preceded by 32-bit integer length of string in bytesVectors of any other type, preceded by 32-bit integer length of number of elementsTables (schema defined types) or Vectors sorted by key (maps / dictionaries)
Ion19\x0f20
  • True: \x11
  • False: \x10
  • Positive \x2x, negative \x3x
  • Zero is always encoded in tag byte.
  • BigInts over 13 bytes (104 bits) have 1+ byte overhead for length
  • \x44 (32-bit float)
  • \x48 (64-bit float)
  • Zero is always encoded in tag byte.
  • UTF-8: \x8x
  • Other strings: \x9x
  • Arbitrary length and overhead
\xbx Arbitrary length and overhead. Length in octets.
  • Structs (numbered fields): \xdx
  • Annotations (named fields): \xex
MessagePack\xc0
  • True: \xc3
  • False: \xc2
  • Single byte "fixnum" (values −32 – 127)
  • or typecode (1 byte) + big-endian (u)int8/16/32/64
Typecode (1 byte) + IEEE single/double
  • Typecode + up to 15 bytes
  • or typecode + length as uint8/16/32 + bytes;

encoding is unspecified21

  • As "fixarray" (single-byte prefix + up to 15 array items)
  • or typecode (1 byte) + 2–4 bytes length + array items
  • As "fixmap" (single-byte prefix + up to 15 key-value pairs)
  • or typecode (1 byte) + 2–4 bytes length + key-value pairs
Netstrings22Not in protocol.Not in protocol.Not in protocol.Not in protocol.Length-encoded as an ASCII string + ':' + data + ','

Length counts only octets between ':' and ','

Not in protocol.Not in protocol.
OGDL Binary
Property list(binary format)
Protocol Buffers
  • 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 (n << 1) XOR (n >> 63)
  • Constant encoding length 32-bit: 32 bits in little-endian 2's complement
  • Constant encoding length 64-bit: 64 bits in little-endian 2's complement
UTF-8-encoded, preceded by varint-encoded integer length of string in bytesRepeated value with the same tag or, for varint-encoded integers only, values packed contiguously and prefixed by tag and total byte length
Smile\x21
  • True: \x23
  • False: \x22
  • Single byte "small" (values −16 – 15 encoded as \xc0–\xdf),
  • zigzag-encoded varints (1–11 data bytes), or BigInteger
IEEE single/double, BigDecimalLength-prefixed "short" Strings (up to 64 bytes), marker-terminated "long" Strings and (optional) back-referencesArbitrary-length heterogenous arrays with end-markerArbitrary-length key/value pairs with end-marker
Structured Data eXchange Formats (SDXF)Big-endian signed 24-bit or 32-bit integerBig-endian IEEE doubleEither UTF-8 or ISO 8859-1 encodedList of elements with identical ID and size, preceded by array header with int16 lengthChunks can contain other chunks to arbitrary depth.
Thrift

See also

References

  1. Apache Thrift https://thrift.apache.org/

  2. Bormann, Carsten (2018-12-26). "CBOR relationship with msgpack". GitHub. Retrieved 2023-08-14. https://github.com/msgpack/msgpack/issues/258#issuecomment-449978394

  3. "Implementations". GitHub. https://github.com/edn-format/edn/wiki/Implementations

  4. "HAPI FHIR - The Open Source FHIR API for Java". hapifhir.io. http://hapifhir.io/

  5. cpython/Lib/pickle.py https://github.com/python/cpython/blob/v3.9.0/Lib/pickle.py#L137-L144

  6. "A Brief History of SOAP". www.xml.com. https://www.xml.com/pub/a/ws/2001/04/04/soap.html

  7. Ben-Kiki, Oren; Evans, Clark; Net, Ingy döt (2009-10-01). "YAML Ain't Markup Language (YAML) Version 1.2". The Official YAML Web Site. Retrieved 2012-02-10. http://yaml.org/spec/1.2/spec.html#id2708710

  8. "text_format.h - Protocol Buffers". Google Developers. https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.text_format

  9. "JSON Mapping - Protocol Buffers". Google Developers. https://developers.google.com/protocol-buffers/docs/proto3#json

  10. "Avro Json Format". https://avro.apache.org/docs/1.9.2/spec.html#json_encoding

  11. "NSPropertyListSerialization class documentation". www.gnustep.org. Archived from the original on 2011-05-19. Retrieved 2009-10-28. https://web.archive.org/web/20110519164921/http://gnustep.org/resources/documentation/Developer/Base/Reference/NSPropertyList.html

  12. "Documentation Archive". developer.apple.com. https://developer.apple.com/library/archive/

  13. Oren Ben-Kiki; Clark Evans; Brian Ingerson (2005-01-18). "Null Language-Independent Type for YAML Version 1.1". YAML.org. Retrieved 2009-09-12. http://yaml.org/type/null.html

  14. Oren Ben-Kiki; Clark Evans; Brian Ingerson (2005-01-18). "Boolean Language-Independent Type for YAML Version 1.1". YAML.org. Clark C. Evans. Retrieved 2009-09-12. http://yaml.org/type/bool.html

  15. Oren Ben-Kiki; Clark Evans; Brian Ingerson (2005-01-18). "Boolean Language-Independent Type for YAML Version 1.1". YAML.org. Clark C. Evans. Retrieved 2009-09-12. http://yaml.org/type/bool.html

  16. Oren Ben-Kiki; Clark Evans; Brian Ingerson (2005-02-11). "Integer Language-Independent Type for YAML Version 1.1". YAML.org. Clark C. Evans. Retrieved 2009-09-12. http://yaml.org/type/int.html

  17. Oren Ben-Kiki; Clark Evans; Brian Ingerson (2005-01-18). "Floating-Point Language-Independent Type for YAML Version 1.1". YAML.org. Clark C. Evans. Retrieved 2009-09-12. http://yaml.org/type/float.html

  18. Any XML based representation can be compressed, or generated as, using EXI – "Efficient XML Interchange (EXI) Format 1.0 (Second Edition)".[17] – which is a "Schema Informed" (as opposed to schema-required, or schema-less) binary compression standard for XML. https://www.w3.org/TR/2014/REC-exi-20140211/Overview.html

  19. Ion Binary Encoding http://amzn.github.io/ion-docs/docs/binary.html

  20. All basic Ion types have a null variant, as its 0xXf tag. Any tag beginning with 0x0X other than 0x0f defines ignored padding.

  21. "MessagePack is an extremely efficient object serialization library. It's like JSON, but very fast and small.: msgpack/msgpack". 2 April 2019 – via GitHub. https://github.com/msgpack/msgpack

  22. Interpretation of Netstrings is entirely application- or schema-dependent.