1 / 2
15 / 17 · Handling JSON Data
JSON 是一种变体
外面的数据没有 OCaml 类型。先落成一个闭集,再投影成你的记录。
Yojson 把 JSON 收成多态变体:Null、Bool、数字、字符串、数组、对象。书后半用 atd 或 ppx 把这种变体映射成你自己的类型,并在失败时给出位置。
书桌用普通变体 json 代替多态变体,数字一律是 Num of float。先学会 match,再去记生成器的注解。
例子
utop
let j = Json.of_string "{\"lang\":\"OCaml\",\"year\":1996}"val j : json = Obj ([("lang", Str "OCaml"); ("year", Num 1996.)])match Json.member j "lang" with
| Some (Str s) -> s
| _ -> "?"- : string = "OCaml"
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2