Кодирование YAML
Кодирование YAML
Заголовок раздела «Кодирование YAML»Разбор YAML-документов в Lua-таблицы и сериализация Lua-значений в YAML-строки.
Загрузка
Заголовок раздела «Загрузка»local yaml = require("yaml")Кодирование
Заголовок раздела «Кодирование»Кодирование значения
Заголовок раздела «Кодирование значения»Преобразует Lua-таблицу в формат YAML.
-- Простые пары ключ-значениеlocal config = { name = "myapp", port = 8080, debug = true}local out = yaml.encode(config)-- name: myapp-- port: 8080-- debug: true
-- Массивы становятся YAML-спискамиlocal items = {"apple", "banana", "cherry"}yaml.encode(items)-- - apple-- - banana-- - cherry
-- Вложенные структурыlocal server = { http = { address = ":8080", timeout = "30s" }, database = { host = "localhost", port = 5432 }}yaml.encode(server)| Параметр | Тип | Описание |
|---|---|---|
data | table | Lua-таблица для кодирования |
options | table? | Опции кодирования (опционально) |
| Поле | Тип | Описание |
|---|---|---|
field_order | string[] | Порядок полей — поля выводятся в указанном порядке |
sort_unordered | boolean | Сортировать поля, не указанные в field_order, по алфавиту |
-- Управление порядком полей в выводеlocal entry = { zebra = 1, alpha = 2, name = "test", kind = "demo"}
-- Поля выводятся в указанном порядке, остальные сортируютсяlocal result = yaml.encode(entry, { field_order = {"name", "kind"}, sort_unordered = true})-- name: test-- kind: demo-- alpha: 2-- zebra: 1
-- Просто отсортировать все поля по алфавитуyaml.encode(entry, {sort_unordered = true})-- alpha: 2-- kind: demo-- name: test-- zebra: 1Возвращает: string, error
Декодирование
Заголовок раздела «Декодирование»Разбор строки
Заголовок раздела «Разбор строки»Разбирает YAML-строку в Lua-таблицу.
-- Разбор конфигурацииlocal config, err = yaml.decode([[server: host: localhost port: 8080features: - auth - logging - metrics]])if err then return nil, errend
print(config.server.host) -- "localhost"print(config.server.port) -- 8080print(config.features[1]) -- "auth"
-- Разбор содержимого файлаlocal content = fs.read("config.yaml")local settings, err = yaml.decode(content)if err then return nil, errors.wrap(err, "invalid config file")end
-- Работа со смешанными типамиlocal data = yaml.decode([[name: testcount: 42ratio: 3.14enabled: truetags: - lua - wippy]])print(type(data.count)) -- "number"print(type(data.enabled)) -- "boolean"print(type(data.tags)) -- "table"| Параметр | Тип | Описание |
|---|---|---|
data | string | YAML-строка для разбора |
Возвращает: any, error — возвращает table, array, string, number или boolean в зависимости от содержимого YAML
| Условие | Kind | Повторяемо |
|---|---|---|
| На вход не таблица (encode) | errors.INVALID | нет |
| На вход не строка (decode) | errors.INVALID | нет |
| Пустая строка (decode) | errors.INVALID | нет |
| Неверный синтаксис YAML | errors.INTERNAL | нет |
См. Обработка ошибок для работы с ошибками.