What is the point of BSON when it is no smaller than JSON in some cases?

BSON is designed to be efficient in space, but in some cases is not much more efficient than JSON. In some cases BSON uses even more space than JSON. The reason for this is another of the BSON design goals: traversability. BSON adds some "extra" information to documents, like length of strings and subobjects. This makes traversal faster.

BSON is also designed to be fast to encode and decode. For example, integers are stored as 32 (or 64) bit integers, so they don't need to be parsed to and from text. This uses more space than JSON for small integers, but is much faster to parse.

In addition to compactness, BSON adds additional data types unavailable in JSON, notably the BinData and Date data types.

What is a .bson file?

BSON files (by convention, using ".bson" extension) contain zero or more BSON documents written contiguously to a flat file. For example, the MongoDB mongodump utility outputs BSON files. The bsontools utilities manipulate BSON files.

Where can I get more help/information?

The best place to ask questions about BSON is on the BSON mailing list.

How can I contribute or make fixes to this site?

The best way to contribute to this site is to fork the bsonspec.org project on GitHub and submit a pull request.


The following are some example documents (in JavaScript / Python style syntax) and their corresponding BSON representations.

 {"hello": "world"}

  \x16\x00\x00\x00                   // total document size
  \x02                               // 0x02 = type String
  hello\x00                          // field name
  \x06\x00\x00\x00world\x00          // field value
  \x00                               // 0x00 = type EOO ('end of object')

 {"BSON": ["awesome", 5.05, 1986]}