BSON
{{Short description|Computer data interchange format}}
{{Infobox file format
| screenshot = BSON website logo.svg
| name = BSON
|_nomimecode = on
| mime = {{code|application/bson}}{{cite web |url=https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/bson-support-in-web-api-21 |title=BSON Support in ASP.NET Web API 2.1 - ASP.NET 4.x |date=2014-01-20 |website=Microsoft Docs |access-date=2010-01-12}}
| extension = .bson
| genre = Data interchange
| extended from = JSON
| url = {{URL|https://bsonspec.org/}}
}}
BSON ({{IPAc-en|ˈ|b|iː|s|ə|n}}; Binary JSON){{cite web |title=BSON (Binary JSON) Serialization |url=https://bsonspec.org/ |access-date=23 November 2021}} 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.{{cite web |url=https://bsonspec.org/implementations.html |title=BSON Implementation Projects |access-date=2021-11-24 }}
Data types and syntax
BSON has a published specification.{{Cite web|url=https://bsonspec.org/spec.html|title=BSON (Binary JSON): Specification|website=bsonspec.org|access-date=2021-11-24}}{{Cite web|url=https://www.informit.com/articles/article.aspx?p=2247310&seqNum=4%20api.mongodb.com/python/current/api/bson/regex.html|title=Introducing NoSQL and MongoDB {{!}} What Is NoSQL? {{!}} InformIT|website=www.informit.com|access-date=2018-01-17}} 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 w/o time zone (long integer number of milliseconds since the Unix epoch)
- byte array (for arbitrary binary data)
- Boolean (
true
andfalse
) - null
- BSON object
- BSON array
- JavaScript code
- MD5 binary data
- Regular expression (Perl compatible regular expressions ("PCRE") version 8.41 with UTF-8 support){{Cite web|url=https://api.mongodb.com/python/current/api/bson/regex.html|title=regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation|website=api.mongodb.com|access-date=2018-01-17|archive-date=2016-05-10|archive-url=https://web.archive.org/web/20160510224657/https://api.mongodb.com/python/current/api/bson/regex.html|url-status=dead}}
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{{Cite web|url=https://docs.mongodb.com/manual/reference/mongodb-extended-json/|title=MongoDB Extended JSON documentation|website=docs.mongodb.com|access-date=2020-05-03}} 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 {{code|{"hello": "world"} }} will be stored as:
\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')
See also
- Comparison of data serialization formats
- JSON
- CBOR
- Smile (binary JSON)
- UBJSON
References
{{Reflist}}
External links
- {{Official website|https://bsonspec.org/}}
- [https://docs.mongodb.com/database-tools/bsondump/ {{mono|bsondump}} tool included with MongoDB]
{{Data Exchange}}