跳转到内容

yaml

yaml 提供纯 lua 实现的 yaml 解析器和生成器,外加一个命令行工具。零外部依赖,xmake 能跑的地方它都能跑。

载荷提供什么
modules/yaml公开模块,import("@addon.yaml.yaml")
modules/private/yaml/*扫描、解析、生成和命令行的内部实现

支持实际项目里会遇到的语法:块映射和块序列(含 - name: foo 紧凑写法)、流式集合、带转义的引号标量、块标量(|>-|2+)、锚点/别名/合并键、标准 tag 和多文档。

安装

sh
$ xmake addon --install yaml

命令行

sh
$ xmake l @addon.yaml.yaml --help
$ xmake l @addon.yaml.yaml config.yaml            # 格式化
$ xmake l @addon.yaml.yaml -f json config.yaml    # 转成 json(还支持 lua)
$ xmake l @addon.yaml.yaml -g jobs.build.name ci.yaml   # 取某个路径的值
$ xmake l @addon.yaml.yaml -c config.yaml         # 只做语法检查
$ cat config.yaml | xmake l @addon.yaml.yaml -f json

在脚本里使用

lua
import("@addon.yaml.yaml")

local value = yaml.decode("name: xmake\ntags: [build, lua]")
print(value.tags[1])                       -- build

local text = yaml.encode({name = "xmake", tags = yaml.mark_as_array({"build"})})
local conf = yaml.loadfile("config.yaml")
yaml.savefile("config.yaml", conf)
接口说明
yaml.decode(text)解析第一个文档
yaml.decode_all(text)解析所有文档
yaml.encode(value, opt)opt = {indent = 2, sortkeys = true, blockstyle = true}
yaml.loadfile(path, opt) / yaml.savefile(path, value, opt)文件读写
yaml.null() / yaml.is_null(v)null 值
yaml.mark_as_array(t)让空表输出成 []

null 值和数组标记直接复用 core.base.json 的,所以解析结果可以原样交给 json.encode