使用 yaml 反序列化 YAML 数据
任务
数据格式 / YAML / 反序列化 YAML 数据
反序列化一个 YAML 文件,其结构映射到一些 OCaml 类型。
使用的 Opam 包
- yaml 测试版本:3.2.0 - 使用库:yaml
- ppx_deriving_yaml 测试版本:0.2.2 - 使用库:ppx_deriving_yaml
代码
这是我们将要反序列化到我们定义的类型中的字符串。
let yaml = {|
french name: pâte sucrée
ingredients:
- name: flour
weight: 250
- name: butter
weight: 100
- name: sugar
weight: 100
- name: egg
weight: 50
- name: salt
weight: 5
steps:
- soften butter
- add sugar
- add egg and salt
- add flour
|}
[@@deriving of_yaml]
属性使来自库 ppx_deriving_yaml
的 ppx 生成函数 ingredient_of_yaml : Yaml.value -> (ingredient, [> `Msg of string]) result
如果需要序列化和反序列化,请将 of_yaml
替换为 yaml
。
type ingredient = {
name: string;
weight: int;
} [@@deriving of_yaml]
此处生成的函数 recipe_of_yaml : Yaml.value -> (ingredient, [> `Msg of string]) result
在内部使用 ingredient_of_yaml
。
type recipe = {
name: string; [@key "french name"]
ingredients: ingredient list;
steps: string list;
} [@@deriving of_yaml]
解析和转换为记录是链式的。
let pate_sucree =
yaml
|> Yaml.of_string
|> fun yaml -> Result.bind yaml recipe_of_yaml