20. JSON 操作库

JSON 模块实现 JSON 解析器和序列化例程。 有关详细信息,请参阅`JHSON <www.json.org>`。

所有函数和符号都在 “json” 模块中,使用 require 来访问它。

require daslib/json

20.1. 类型别名

JsValue is a variant type

_object

table<string;JsonValue?>

_array

array<JsonValue?>

_string

string

_number

double

_bool

bool

_null

void?

单个 JSON 元素。

Token is a variant type

_string

string

_number

double

_bool

bool

_null

void?

_symbol

int

_error

string

JSON 输入流token。

JsonValue

JsonValue字段是

value

JsValue

JSON 值,包装任何 JSON 元素。

TokenAt

TokenAt字段是

value

Token

line

int

row

int

JSON 解析令牌。包含 token 及其位置。

20.2. 值转换

JV(v: string const)

JV returns json::JsonValue ?

argument

argument type

v

string const

从 value 中创建 JsonValue

JV(v: double const)

JV returns json::JsonValue ?

argument

argument type

v

double const

从 value 中创建 JsonValue

JV(v: bool const)

JV returns json::JsonValue ?

argument

argument type

v

bool const

从 value 中创建 JsonValue

JVNull()

JVNull returns json::JsonValue ?

创建表示 nullJsonValue

JV(v: table<string;JsonValue?>)

JV returns json::JsonValue ?

argument

argument type

v

table<string; json::JsonValue ?>

从 value 中创建 JsonValue

JV(v: array<JsonValue?>)

JV returns json::JsonValue ?

argument

argument type

v

array< json::JsonValue ?>

从 value 中创建 JsonValue

20.3. 读取和写入

read_json(text: string const implicit; error: string&)

read_json returns json::JsonValue ?

argument

argument type

text

string const implicit

error

string&

text 字符串中读取 JSON。 如果 error 不为空,则包含解析错误消息。

read_json(text: array<uint8> const; error: string&)

read_json returns json::JsonValue ?

argument

argument type

text

array<uint8> const

error

string&

text 字符串中读取 JSON。 如果 error 不为空,则包含解析错误消息。

write_json(val: JsonValue? const)

write_json returns string

argument

argument type

val

json::JsonValue ? const

接受临时类型的重载 很好,因为 json 不会转义函数

write_json(val: JsonValue? const#)

write_json returns string

argument

argument type

val

json::JsonValue ? const#

接受临时类型的重载 很好,因为 json 不会转义函数

20.4. JSON 属性

set_no_trailing_zeros(value: bool const)

set_no_trailing_zeros returns bool const

argument

argument type

value

bool const

如果 value 为 true,则写入数字时不带尾随零。

set_no_empty_arrays(value: bool const)

set_no_empty_arrays returns bool const

argument

argument type

value

bool const

如果`value` 为 true,则根本不写入空数组

set_allow_duplicate_keys(value: bool const)

set_allow_duplicate_keys returns bool const

argument

argument type

value

bool const

如果 value 为 true,则对象中允许重复键。后面的键会覆盖前面的键。 注意 - 出于性能原因,我们在此处使用 StringBuilderWriter

20.5. 损坏的 JSON

try_fixing_broken_json(bad: string)

try_fixing_broken_json returns string

argument

argument type

bad

string

修复了已损坏的 json,到目前为止支持 1. “string” + “string” 字符串连接 2. “text “嵌套文本 “text “嵌套引号 3. 在对象或数组末尾添加额外的 4. /uXXXXXX 序列在空白区域中间 写入直到字符串开头或结束 如果 eof 我们完成 写入第一个引号 写入直到字符串结束或文件结束 如果 eof 我们完成,我们固定结束引号并完成 跳过空白区域 如果 eof 我们完成,我们固定结束引号并完成 字符串后面有效的 JSON 事物是 : , }, ], 或 , 如果是其中之一,我们关闭字符串,完成 现在,如果是 + -,它可能是一个字符串连接 如果确实是新字符串,我们回到字符串编写,并添加分隔符 OK,它不是字符串连接,也不是有效字符 如果引号后是空白,我们假定它缺少 ‘,’

。我们假定它是嵌套引号,并用" 替换

如果是这样,我们就完成了,我们修复了嵌套引号和结束引号,我们就完成了 写入第二个被替换的引号