52 lines
2.0 KiB
Markdown
52 lines
2.0 KiB
Markdown
# Binary JSON Format Specification
|
|
|
|
Format version: 1.0
|
|
|
|
This binary data format is developed for use as binary version of JSON in [VoxelEngine-Cpp](https://github.com/MihailRis/VoxelEngine-Cpp) and not compatible with [BSON](https://bsonspec.org/spec.html) due to elements/entries syntax and type codes differences
|
|
|
|
## Basic types
|
|
|
|
byteorder: little-endian
|
|
| Name | Size | Definition |
|
|
| ------- | ------- | ----------------------- |
|
|
| byte | 1 byte | 8 bit unsigned integer |
|
|
| int16 | 2 bytes | 16 bit signed integer |
|
|
| int32 | 4 bytes | 32 bit signed integer |
|
|
| int64 | 8 bytes | 64 bit unsigned integer |
|
|
| uint32 | 4 bytes | 32 bit unsigned integer |
|
|
| float64 | 8 bytes | 64 bit floating point |
|
|
|
|
## Syntax (RFC 5234)
|
|
|
|
```bnf
|
|
file = %x01 document / cdocument file content
|
|
document = uint32 (*entry) %x00 uint32 stores bytes number
|
|
of the encoded document
|
|
including the uint32 size
|
|
entry = cstring value
|
|
value = %x01 document
|
|
/ %x02 (*value) %x00 list of values
|
|
/ %x03 byte 8 bit integer
|
|
/ %x04 int16 16 bit integer
|
|
/ %x05 int32 32 bit integer
|
|
/ %x06 int64 64 bit integer
|
|
/ %x07 float64 number
|
|
/ %x08 string utf-8 encoded string
|
|
/ %x09 uint32 (*byte) bytes array
|
|
/ %x0A boolean 'false'
|
|
/ %x0B boolean 'true'
|
|
/ %x0C null value
|
|
cdocument = %x1F %x8B (16*byte) gzip-compressed data:
|
|
%x01 document
|
|
cstring = (*%x01-FF) %x00
|
|
string = uint32 (*byte) uint32 stores number of the
|
|
encoded string bytes
|
|
|
|
float64 = 8byte
|
|
int64 = 8byte
|
|
uint32 = 4byte
|
|
int32 = 4byte
|
|
int16 = 2byte
|
|
byte = %x00-FF
|
|
```
|