Версия:

Модуль yaml

Модуль yaml

Общие сведения

Модуль yaml берет строки в формате YAML и декодирует их или берет ряд значений в ином формате и кодирует их в формат YAML.

Индекс

Ниже приведен перечень всех функций и элементов модуля yaml.

Имя Использование
yaml.encode() Конвертация Lua-объекта в YAML-строку
yaml.decode() Конвертация YAML-строки в Lua-объект
yaml.NULL Аналог «nil» в языке Lua
yaml.encode(lua_value)

Конвертация Lua-объекта в YAML-строку.

Параметры:
  • lua_value – скалярное значение или значение из Lua-таблицы.
возвращается:

оригинальное значение, преобразованное в YAML-строку.

тип возвращаемого значения:
 

string (строка)

yaml.decode(string)

Конвертация YAML-строки в Lua-объект.

Параметры:
  • string – строка в формате YAML.
возвращается:

оригинальное содержание в формате Lua-таблицы.

тип возвращаемого значения:
 

таблица

yaml.NULL

Значение, сопоставимое с нулевым значением «nil» в языке Lua, которое можно использовать в качестве объекта-заполнителя в кортеже.

Пример

tarantool> yaml = require('yaml')
 ---
 ...
 tarantool> y = yaml.encode({'a', 1, 'b', 2})
 ---
 ...
 tarantool> z = yaml.decode(y)
 ---
 ...
 tarantool> z[1], z[2], z[3], z[4]
 ---
 - a
 - 1
 - b
 - 2
 ...
 tarantool> if yaml.NULL == nil then print('hi') end
 hi
 ---
 ...

Набор YAML-стилей можно указать с помощью __serialize:

  • __serialize="sequence" для массива последовательности блоков,
  • __serialize="seq" для массива последовательности потоков,
  • __serialize="mapping" для ассоциативного массива последовательности блоков,
  • __serialize="map" для ассоциативного массива последовательности потоков.

Сериализация „A“ и“ B“ различными значениями __serialize приводит к различным результатам:

tarantool> yaml = require('yaml')
 ---
 ...
 tarantool> yaml.encode(setmetatable({'A', 'B'}, { __serialize="sequence"}))
 ---
 - |
   ---
   - A
   - B
   ...
 ...
 tarantool> yaml.encode(setmetatable({'A', 'B'}, { __serialize="seq"}))
 ---
 - |
   ---
   ['A', 'B']
   ...
 ...
 tarantool> yaml.encode({setmetatable({f1 = 'A', f2 = 'B'}, { __serialize="map"})})
 ---
 - |
   ---
   - {'f2': 'B', 'f1': 'A'}
   ...
 ...
 tarantool> yaml.encode({setmetatable({f1 = 'A', f2 = 'B'}, { __serialize="mapping"})})
 ---
 - |
   ---
   - f2: B
     f1: A
   ...
 ...

Кроме того, некоторые параметры конфигурации YAML для кодировки можно изменить так же, как и для JSON.