BSON
Computer data interchange format
title: "BSON" type: doc version: 1 created: 2026-02-28 author: "Wikipedia contributors" status: active scope: public tags: ["json", "data-serialization-formats", "document-oriented-databases"] description: "Computer data interchange format" topic_path: "technology/databases" source: "https://en.wikipedia.org/wiki/BSON" license: "CC BY-SA 4.0" wikipedia_page_id: 0 wikipedia_revision_id: 0
::summary Computer data interchange format ::
::data[format=table title="Infobox file format"]
| Field | Value |
|---|---|
| screenshot | BSON website logo.svg |
| name | BSON |
| _nomimecode | on |
| mime | |
| extension | .bson |
| genre | Data interchange |
| extended from | JSON |
| url | |
| :: |
| screenshot = BSON website logo.svg | name = BSON |_nomimecode = on | mime = | extension = .bson | genre = Data interchange | extended from = JSON | url =
BSON (; Binary JSON) is a computer data interchange format extending JSON. It is a binary form for representing simple or complex data structures including associative arrays (also known as name-value pairs), integer indexed arrays, and a suite of fundamental scalar types. BSON originated in 2009 at MongoDB. Several scalar data types are of specific interest to MongoDB and the format is used both as a data storage and network transfer format for the MongoDB database, but it can be used independently outside of MongoDB. Implementations are available in a variety of languages such as C, C++, C#, D, Delphi, Erlang, Go, Haskell, Java, JavaScript, Julia, Lua, OCaml, Perl, PHP, Python, Ruby, Rust, Scala, Smalltalk, and Swift.
Data types and syntax
BSON has a published specification. The topmost element in the structure must be of type BSON object and contains 1 or more elements, where an element consists of a field name, a type, and a value. Field names are strings. Types include:
- Unicode string (using the UTF-8 encoding)
- 32-bit integer
- 64-bit integer
- double (64-bit IEEE 754 floating point number, including NaN/Inf)
- decimal128 (128-bit IEEE 754-2008 floating point number; binary integer decimal (BID) variant), suitable as a carrier for decimal-place sensitive financial data and arbitrary precision numerics with 34 decimal digits of precision, a max value of approximately 106145
- datetime in UTC (signed 64-bit integer number of milliseconds since the Unix epoch)
- byte array (for arbitrary binary data)
- Boolean (
trueandfalse) - null
- BSON object
- BSON array
- JavaScript code
- MD5 binary data
- Regular expression (Perl compatible regular expressions ("PCRE") version 8.41 with UTF-8 support)
An important differentiator to JSON is that BSON contains types not present in JSON (e.g. datetime, byte array, and proper IEEE 754 floats) and offers type-strict handling for several numeric types instead of a universal "number" type. For situations where these additional types need to be represented in a textual way, MongoDB's Extended JSON format can be used.
Efficiency
Compared to JSON, BSON is designed to be efficient both in storage space and scan-speed. Large elements in a BSON document are prefixed with a length field to facilitate scanning. In some cases, BSON will use more space than JSON due to the length prefixes and explicit array indices.
Example
A document such as will be stored as:
::code[lang=json] \x16\x00\x00\x00 // total document size \x02 // 0x02 = type String hello\x00 // field name \x06\x00\x00\x00world\x00 // field value (size of value, value, null terminator) \x00 // 0x00 = type EOO ('end of object') ::
References
References
- (2014-01-20). "BSON Support in ASP.NET Web API 2.1 - ASP.NET 4.x".
- "BSON (Binary JSON) Serialization".
- "BSON Implementation Projects".
- "BSON (Binary JSON): Specification".
- "Introducing NoSQL and MongoDB {{!}} What Is NoSQL? {{!}} InformIT".
- "regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation".
- "MongoDB Extended JSON documentation".
::callout[type=info title="Wikipedia Source"] This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page. ::