使用 hl_yaml 反序列化 YAML 数据

任务

数据格式 / YAML / 反序列化 YAML 数据

反序列化一个 YAML 文件,其结构映射到一些 OCaml 类型。

使用的 Opam 包

  • hl_yaml 测试版本:1.0.0 — 使用的库:hl_yaml
  • ppx_deriving_yojson 测试版本:3.7.0 — 使用的库:ppx_deriving_yojson

代码

这是我们反序列化到下面定义的类型的字符串。

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_yojson] 属性使来自库 ppx_deriving_yojson 的 ppx 生成函数 ingredient_of_yojson : Yojson.Safe.t -> (ingredient, string) result。如果需要序列化和反序列化,请将 of_yojson 替换为 yojson

type ingredient = {
  name: string;
  weight: int;
} [@@deriving of_yojson]

此处生成的函数 recipe_of_yojson : Yojson.Safe.t -> (ingredient, string) result 在内部使用 ingredient_of_yojson

type recipe = {
  name: string; [@key "french name"]
  ingredients: ingredient list;
  steps: string list;
} [@@deriving of_yojson]

parse 以一个函数作为参数,该函数将 Yojson.Safe.t 转换为所需的记录类型。

let pate_sucree =
  yaml
  |> Hl_yaml.Unix.parse ~of_yojson:recipe_of_yojson

食谱无法运行?注释不清楚或已过时?

提交问题为该食谱贡献代码

此任务的其他食谱