使用 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.dev.org.tw/"
}
|}

註解 [@@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

食譜無法運作嗎?註解不清楚或已過時?

開啟一個 issue貢獻這個食譜