使用 ppx_yojson_conv 反序列化 JSON 数据

任务

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

使用的 Opam 包

  • ppx_yojson_conv 测试版本:v0.17.0 — 使用的库:ppx_yojson_conv
  • yojson 测试版本:2.1.2 — 使用的库:yojson

代码

我们打开 Ppx_yojson_conv_lib.Yojson_conv.Primitives 以将反序列化基本类型函数引入作用域。

open Ppx_yojson_conv_lib.Yojson_conv.Primitives

let json = {|
{
  "name": "ocaml",
  "url": "https://ocaml.org.cn/"
}
|}

注释 [@@deriving of_yojson] 使来自 ppx_yojson_conv 的 PPX 生成一个函数 language_of_yojson,该函数将 Yojson.Safe.t 类型的值转换为 language 类型。

type language = { 
  name: string; 
  url: string 
} [@@deriving of_yojson]

首先我们将 JSON 字符串转换为 Yojson.Safe.t,然后我们使用生成的函数创建记录。如果解析失败,则会抛出 Of_yojson_error 异常,我们可以处理该异常。

try
  let result = 
    json
    |> Yojson.Safe.from_string 
    |> language_of_yojson 
  Some result
with Ppx_yojson_conv_lib.Yojson_conv.Of_yojson_error (exception, _) ->
  let _ = 
    Printexc.to_string exception print_endline in
  None

食谱不起作用?注释不清楚或已过时?

提交问题参与此食谱的贡献