Though JSON and BSON have near identical names, they are not identical in purpose. BSON is based on JSON but has its own distinct features and advantages. This article will look at these two object notations, uncover their differences, and address any confusion surrounding BSON and JSON.
BSON is a binary encoded Javascript Object Notation (JSON)—a textual object notation widely used to transmit and store data across web based applications. JSON is easier to understand as it is human-readable, but compared to BSON, it supports fewer data types. BSON encodes type and length information, too, making it easier for machines to parse.
{"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')
Just like JSON, BSON supports various programming languages such as C, C++, C#, Java, JavaScript, PHP, Python, Ruby, and Swift.
BSON stands for Binary Javascript Object Notation. It is a binary-encoded serialization of JSON documents. BSON has been extended to add some optional non-JSON-native data types, like dates and binary data.
BSON can be compared to other binary formats, like Protocol Buffers. The greater difference is that BSON is more "Schema-less" than Protocol Buffers, providing the advantage of flexibility and the slight disadvantage of space efficiency.
BSON specification version 1.1 is published at bsonspec.org. The topmost element in the structure must be of type BSON object and should contain one or more elements, where an element can be a field name (string), a type, or a value. The following are some of the types included in BSON.
byte | 1 byte (8-bits) |
int32 | 4 bytes (32-bit signed integer, two's complement) |
int64 | 8 bytes (64-bit signed integer, two's complement) |
uint64 | 8 bytes (64-bit unsigned integer) |
double | 8 bytes (64-bit IEEE 754-2008 binary floating-point) |
decimal128 | 16 bytes (128-bit IEEE 754-2008 decimal floating-point) |
date | 8 bytes(64-bit integer) |
objectId | 12 bytes(4-byte timestamp value, 5-byte random value, and 3-byte incrementing counter) |
array | Storage is based on data (A byte array uses 1 byte, a short array uses 2 bytes, and an integer array uses 4 bytes) |
To learn more about BSON specifications, visit BSON documentation.
JSON | BSON | |
Type | JSON files are written in text format. | BSON files are written in binary. |
Speed | JSON is fast to read but slower to build. | BSON is slow to read but faster to build and scan. |
Space | JSON data is slightly smaller in byte size. | BSON data is slightly larger in byte size. |
Encode and Decode | We can send JSON through APIs without encoding and decoding. | BSON files are encoded before storing and decoded before displaying. |
Parse | JSON is a human-readable format that doesn't require parsing. | BSON needs to be parsed as they are machine-generated and not human-readable. |
Data Types | JSON has a specific set of data types—string, boolean, number for numeric data types, array, object, and null. | Unlike JSON, BSON offers additional data types such as bindata for binary data, decimal128 for numeric. |
Usage | Used to send data through the network (mostly through APIs). | Databases use BSON to store data. |
To know more about the differences between BSON and JSON, visit JSON and BSON.
The following three characteristics make BSON advantageous to use.
BSON is lightweight: This makes it possible for a large amount of data to be stored in BSON file format. Additionally, BSON files are easily stored and sent through the network, making them perfect for storing and sending data.
BSON was made to efficiently store space and scan: In a BSON document, large elements are prefixed with a length field. Documents in BSON use more space than JSON due to the length prefixes and explicit array indices, but thanks to those prefixes, we are able to scan and query much faster. The prefixes make it easy to compare and calculate directly on data, simplifying application code consumption.
Unlike in JSON, you can find data types such as Bindata, Minkey, Maxkey, Binary Data, ObjectID, Regular Expression, JavaScript, Decimal128, and Date for datetime in BSON. These data types are crucial when working with specialty programs.
For example, when working with financial systems data, you can use BSON’s Decimal128 for 128 bits of high precision decimal representation.
Many modern systems use binary-based floating-point arithmetic to represent exact decimal fractions through Float and double data types. These data types provide approximation but not the precise value. Using BSON in such cases gives you high precision.
Visit BSON data types to find the list of datatypes exclusive to BSON but not to JSON.
You can use various converters between JSON and BSON formats. One such example is OnlineJSONTools. A quick Google search will give you various online converters that easily change the JSON format to BSON format and vice versa.
BSON is the format used both for data storage and network transfer in MongoDB. After storing data in MongoDB, you may want to get your data back as JSON, among many other formats. When you want to export your files as JSON, you can use MongoDB’s database tool, bsondump
, to convert BSON documents to JSON. To learn how to export BSON documents as JSONs in MongoDB, read below.
There are plenty of online BSON text viewers that are capable of opening BSON files. If you have a large set of BSON files, you can import BSON files to MongoDB to see the contents of the file from there.
First, you need to install the MongoDB database tools. MongoDB database tools are a suite of command-line utilities for working with MongoDB. You can learn about installing them from this documentation.
After installing those tools, you can easily import and export BSON files in MongoDB by using a few simple commands. The mongorestore
command loads data from either a binary database dump created by mongodump
or the standard input into a mongod
or mongos
instance.
To import a .bson file, run the following command on your system command line.
mongorestore -d db_name /path/file.bson
Here, db_name is the name of the database you want to import. Path denotes the absolute path of your .bson file, while file represents the BSON file’s name.
For a single collection, run the following command on your system command line.
mongorestore --drop -d db_name -c collection_name /path/file.bson
Here, collection_name defines the name of the collection that you want to import.
For restoring the complete folder exported by mongodump
.
mongorestore -d db_name /path/
To export BSON documents, use the database tool bsondump
.
Run the following command from the system command line to export the collection as BSON.
bsondump collection.bson
You can use the --outFile option by running the following command from the system command line to export the collection as JSON.
bsondump --outFile=collection.json collection.bson
You can check out the official documentation for bsondump to learn how to install bsondump to convert BSON files to human-readable formats, including JSON.
In case of a problem with the programming language, be sure to update the MongoDB driver to the version that supports the language.
Let’s take the following JSON document example.
{
"hello" : "world"
}
When storing the JSON document, it will be converted to the following.
\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')
BSON is a binary-encoded serialized format of JSON documents. It provides type and length information in characters that are not human-readable but make it easier for machines to parse.
{"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')