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 |
|
JSON 值,包装任何 JSON 元素。
- TokenAt
TokenAt字段是
value |
|
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 ?
创建表示 null 的 JsonValue。
- 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,它不是字符串连接,也不是有效字符 如果引号后是空白,我们假定它缺少 ‘,’
。我们假定它是嵌套引号,并用" 替换
如果是这样,我们就完成了,我们修复了嵌套引号和结束引号,我们就完成了 写入第二个被替换的引号