7.1. JSON manipulation library
The JSON module implements JSON parsing and serialization.
It provides read_json for parsing JSON text into a JsonValue tree,
write_json for serializing back to text, and JV helpers for constructing
JSON values from daslang types.
See also Boost package for JSON for automatic struct-to-JSON conversion and the %json~ reader macro.
See JSON for a hands-on tutorial.
All functions and symbols are in “json” module, use require to get access to it.
require daslib/json
Example:
require daslib/json
[export]
def main() {
let data = "[1, 2, 3]"
var error = ""
var js <- read_json(data, error)
print("json: {write_json(js)}\n")
unsafe {
delete js
}
}
// output:
// json: [1,2,3]
7.1.1. Type aliases
- json::variant JsValue
Single JSON element.
- Variants
- json::variant Token
JSON input stream token.
- Variants
_string : string - string token
_number : double - number token
_longint : int64 - extension, not part of JSON standard (represents long integer numbers)
_bool : bool - boolean token
_null : void? - null token
_symbol : int - symbol token (one of []{}:,)
_error : string - error token
7.1.2. Structures
- json::JsonValue
JSON value, wraps any JSON element.
- Fields
value : JsValue - value of the JSON element
- json::TokenAt
JSON parsing token. Contains token and its position.
- Fields
value : Token - token value
line : int - token position in the input stream
row : int - token position in the input stream
7.1.3. Value conversion
7.1.3.1. JV
- json::JV(v: string) : JsonValue?()
Creates JsonValue out of string value.
- Arguments
v : string
- json::JV(v: double) : JsonValue?()
- json::JV(v: bool) : JsonValue?()
- json::JV(v: table<string, JsonValue?>) : JsonValue?()
- json::JV(v: float) : JsonValue?()
- json::JV(v: array<JsonValue?>) : JsonValue?()
- json::JV(v: int) : JsonValue?()
- json::JV(v: bitfield) : JsonValue?()
- json::JV(v: bitfield16:uint16<>) : JsonValue?()
- json::JV(v: bitfield8:uint8<>) : JsonValue?()
- json::JV(v: bitfield64:uint64<>) : JsonValue?()
- json::JV(val: int8) : JsonValue?()
- json::JV(val: uint8) : JsonValue?()
- json::JV(val: int16) : JsonValue?()
- json::JV(val: uint) : JsonValue?()
- json::JV(val: uint16) : JsonValue?()
- json::JV(val: int64) : JsonValue?()
- json::JV(val: uint64) : JsonValue?()
- json::JVNull() : JsonValue?()
Creates JsonValue representing null.
7.1.4. Read and write
7.1.4.1. read_json
- json::read_json(text: array<uint8>; error: string&) : JsonValue?()
reads JSON from the text array of uint8. if error is not empty, it contains the parsing error message.
- Arguments
text : array<uint8>
error : string&
- json::read_json(text: string; error: string&) : JsonValue?()
7.1.5. JSON properties
- json::set_allow_duplicate_keys(value: bool) : bool()
if value is true, then duplicate keys are allowed in objects. the later key overwrites the earlier one.
- Arguments
value : bool
- json::set_no_empty_arrays(value: bool) : bool()
if value is true, then empty arrays are not written at all
- Arguments
value : bool
- json::set_no_trailing_zeros(value: bool) : bool()
if value is true, then numbers are written without trailing zeros.
- Arguments
value : bool
7.1.6. Broken JSON
- json::try_fixing_broken_json(bad: string) : string()
fixes broken json. so far supported 1. “string” + “string” string concatenation 2. “text “nested text” text” nested quotes 3. extra , at the end of object or array 4. /uXXXXXX sequences in the middle of white space
- Arguments
bad : string