A | B | C | D | E | F | G | H | CH | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
This article needs additional citations for verification. (October 2019) |
Original author(s) | Riyad Kalla |
---|---|
Stable release | Draft 12
|
Written in | Various languages |
Operating system | Any |
Platform | Cross-platform |
Type | Data interchange |
License | Apache 2.0 |
Website | ubjson |
Universal Binary JSON (UBJSON) is a computer data interchange format. It is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.
Rationale and Objectives
UBJSON is a proposed successor to BSON, BJSON and others. UBJSON has the following goals:
- Complete compatibility with the JSON specification – there is a 1:1 mapping between standard JSON and UBJSON.
- Ease of implementation – only including data types that are widely supported in popular programming languages so that there are no problems with certain languages not being supported well.
- Ease of use – it can be quickly understood and adopted.
- Speed and efficiency – UBJSON uses data representations that are (roughly) 30% smaller than their compacted JSON counterparts and are optimized for fast parsing. Streamed serialisation is supported, meaning that the transfer of UBJSON over a network connection can start sending data before the final size of the data is known.
Data types and syntax
UBJSON data can be either a value or a container.
Value types
UBJSON uses a single binary tuple to represent all JSON value types:[1]
type
Each element in the tuple is defined as:
type
The type is a 1-byte ASCII character used to indicate the type of the data following it. The ASCII characters were chosen to make manually walking and debugging data stored in the UBJSON format as easy as possible (e.g. making the data relatively readable in a hex editor). Types are available for the five JSON value types. There is also a no-op type used for stream keep-alive.
- Null:
Z
- No-op:
N
- no operation, to be ignored by the receiving end - Boolean types: true (
T
) and false (F
) - Numeric types: int8 (
i
), uint8 (U
), int16 (I
), int32 (l
), int64 (L
), float32 (d
), float64 (D
), and high-precision (H
) - ASCII character:
C
- UTF-8 string:
S
High-precision numbers are represented as an arbitrarily long, UTF-8 string-encoded numeric value.
length (optional)
The length is an integer number (e.g. uint8, or int64) encoding the size of the data payload in bytes. It is used for strings, high-precision numbers and optionally containers. They are omitted for other types.
Length is encoded following the same convention as integers, thus including its own type. For example, the string hello
is encoded as S
,U
,0x05,h
,e
,l
,l
,o
.
data (optional)
A sequence of bytes representing the actual binary data for this type of value. All numbers are in big-endian order.
Container types
Similarly to JSON, UBJSON defines two container types: array and object.[2]
Arrays are ordered sequences of elements, represented as a .
Objects are labeled sets of elements, represented as a {
followed by zero or more key-value pairs and a trailing }
. Each key is a string with the S
character omitted, and each "value" can be any element of value or container type.
Alternatively, arrays and objects may indicate the number of elements they contain as While there is no explicit binary type, binary data is stored in a strongly typed array of uint8 values. This ensures binary efficiency while maintaining compatibility with JSON, even though JSON has no direct support for binary data.[3][4]
The MIME type 'application/ubjson' is recommended, as is the file extension '.ubj' when stored in a file-system.[4]
#
followed by an integer number before their first element, in which case the trailing or
}
is omitted. Additionally, if all elements have the same type, the types can be omitted and replaced by a single $
followed by the type, in which case the element count must follow immediately. For example, the array may be represented as edit
Representationedit
Software supportedit
See alsoedit
Referencesedit
External linksedit
Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok. Podrobnejšie informácie nájdete na stránke Podmienky použitia.
Antropológia
Aplikované vedy
Bibliometria
Dejiny vedy
Encyklopédie
Filozofia vedy
Forenzné vedy
Humanitné vedy
Knižničná veda
Kryogenika
Kryptológia
Kulturológia
Literárna veda
Medzidisciplinárne oblasti
Metódy kvantitatívnej analýzy
Metavedy
Metodika
Text je dostupný za podmienok Creative
Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších
podmienok.
Podrobnejšie informácie nájdete na stránke Podmienky
použitia.
www.astronomia.sk | www.biologia.sk | www.botanika.sk | www.dejiny.sk | www.economy.sk | www.elektrotechnika.sk | www.estetika.sk | www.farmakologia.sk | www.filozofia.sk | Fyzika | www.futurologia.sk | www.genetika.sk | www.chemia.sk | www.lingvistika.sk | www.politologia.sk | www.psychologia.sk | www.sexuologia.sk | www.sociologia.sk | www.veda.sk I www.zoologia.sk