json
Библиотека json (lua-cjson) переводит значения Lua в JSON и обратно. При ошибке функции не бросают исключение, а возвращают nil и текст ошибки.
Настройки
json.encode_*/json.decode_*общие для всех включённых скриптов. Если нужны свои настройки, создайте отдельный экземпляр черезjson.new().
json.encode(value)#
Переводит значение Lua в строку JSON.
| Параметр | Тип | Описание |
|---|---|---|
value |
any |
таблица, строка, число, boolean или json.null |
Возвращает: string или nil, string — при ошибке текст ошибки (например, Cannot serialise function).
local s = json.encode({ name = "player", hp = 100, tags = { "a", "b" } })
print(s) --> {"name":"player","hp":100,"tags":["a","b"]} (порядок ключей может отличаться)
json.decode(text: string)#
Разбирает строку JSON.
| Параметр | Тип | Описание |
|---|---|---|
text |
string |
JSON |
Возвращает: значение Lua или nil, string при ошибке разбора.
local data, err = json.decode('{"a": 5, "list": [1, 2, 3]}')
if data then
print(data.a, " ", data.list[3]) --> 5 3
else
print("Ошибка: ", err)
end
print(json.decode("{bad")) --> nil Expected ... at character 2
json.null#
Значение, которым представлен JSON null.
local t = json.decode('{"x": null}')
print(t.x == json.null) --> true
json.new()#
Новый независимый экземпляр библиотеки со своими настройками.
Возвращает: table — таблица с теми же функциями.
local myjson = json.new()
myjson.encode_number_precision(4)
print(myjson.encode({ pi = math.pi })) --> {"pi":3.142}
Настройки#
| Функция | Аргументы | По умолчанию | Описание |
|---|---|---|---|
json.encode_sparse_array |
convert?, ratio?, safe? |
false, 2, 10 |
обработка разреженных массивов |
json.encode_max_depth |
depth? |
1000 | наибольшая вложенность при кодировании |
json.decode_max_depth |
depth? |
1000 | наибольшая вложенность при разборе |
json.encode_number_precision |
n? (1–14) |
14 | число значащих цифр |
json.encode_keep_buffer |
boolean? |
true |
переиспользовать буфер |
json.encode_invalid_numbers |
boolean? или "null" |
false |
как кодировать NaN и бесконечность |
json.decode_invalid_numbers |
boolean? |
true |
принимать NaN и бесконечность при разборе |
Каждая функция без аргументов возвращает текущее значение настройки.
print(json.encode_max_depth()) --> 1000