Numerical values are directly supported by either JSON or UBJSON specifications. A numerical value is typically unchanged when converting to the JData annotation. When storing as files, they are directly stored in the JSON/UBJSON numerical value forms. For example
Native data | text-JData/JSON form | binary-JData(UBJSON) | |
---|---|---|---|
a=3 | => | {"a":3} | [{][U][1][a][U][3][}] |
Similar for a floating point number
Native data | text-JData/JSON form | binary-JData(UBJSON) † | |
---|---|---|---|
a=3.14159 | => | {"a":3.14159} | [{][U][1][a][D][3.15169][}] |
There are a few special constants, namely "NaN", "Infinity" and "-Infinity", they are encoded as special string keywords when stored in the JSON/text-JData formats, but stay unchanged when stored in the binary JData format
Native data | text-JData/JSON form | binary-JData(UBJSON) † | |
---|---|---|---|
a=nan | => | {"a":"_NaN_"} | [{][U][1][a][D][nan][}] |
a=inf | => | {"a":"_Inf_"} | [{][U][1][a][D][inf][}] |
a=-inf | => | {"a":"-_Inf_"} | [{][U][1][D][-inf][}] |
Three special constants are directly supported by the JSON/UBJSON specifications, these constants are logical "True", logical "False" and "Null", they are stored as
Native data | text-JData/JSON form | binary-JData(UBJSON) | |
---|---|---|---|
a=true | => | {"a":true} | [{][U][1][a][T][}] |
a=false | => | {"a":false} | [{][U][1][a][F][}] |
a=null | => | {"a":null} | [{][U][1][a][N][}] |
Strings are natively supported in both JSON and UBJSON, therefore, when converting to the JData annotations, they are mostly unchanged. For JSON strings, 9 special characters can be escaped to represent control sequences (\",\\,\/,\b,\f,\n,\r,\t,\uXXXX
). For example
Native data | text-JData/JSON form | binary-JData(UBJSON) | |
---|---|---|---|
a="JData will prevail" | => | {"a":"JData will prevail"} | [{][U][1][a][S][U][18][JData will prevail][}] |
a="Tabs\tNewlines\n" | => | {"a":"Tabs\tNewlines\n"} | [{][U][1][a][S][U][14][Tabs\tNewlines\n][}] |
a="中文UTF-8格式" | => | {"a":"中文UTF-8格式"} | [{][U][1][a][S][U][17][中文UTF-8格式][}] |
We want to mention that in JData, "non-strict" JSON string mode is allowed: that means one can store ASCII values 0-31 as part of the string without escaping.
Hierarchical structures are often needed when representing metadata or simple lists with named-members. Because "structure" data-type can be directly mapped to the "object" construct in JSON and UBJSON, therefore, they do not need to be converted when using the JData annotation.
Native data | text-JData/JSON form | binary-JData(UBJSON) | |
---|---|---|---|
a=struct( | => | { | [{] |
Simple 1-dimensional vectors are supported in both JSON and UBJSON using the "array" construct. For example
Native data | text-JData/JSON form | binary-JData(UBJSON) | |
---|---|---|---|
a=[1,2,3] | => | {"a":[1,2,3]} | [{] |
a=[2.0,"str",nan] | => | {"a":[2.0,"str","_NaN_"]} | [{] |