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
  • _object : table<string; JsonValue?> - JSON object

  • _array : array< JsonValue?> - JSON array

  • _string : string - JSON string

  • _number : double - JSON number

  • _longint : int64 - extension, not part of JSON standard (represents long integer numbers)

  • _bool : bool - JSON boolean

  • _null : void? - JSON null

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.4.2. write_json

json::write_json(val: JsonValue?#) : string()

Overload accepting temporary type

Arguments
json::write_json(val: JsonValue?) : string()

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