2014-03-07 55 views
3

据我了解,这个{“xxx”:1000000000000000}是正确的吗?Yojson解析int64(ocaml)

不知道如何解析它与Yojson.Safe。我正在寻找类似于int64 _的Int64的东西,但没有提供,只有_Int int _和_`Intlit字符串_在api上。

编辑,这是我的问题

let x = "{\"xxx\": 10000000000000}" 
let json = Yojson.Safe.from_string x 
match json with `Assoc [("xxx", `Intlit yyy)] -> yyy | _ -> assert false 

它不会匹配,因为JSON的类型是

val json : Yojson.Safe.json = `Assoc [("xxx", `Int 10000000000000)] 

回答

3

看来Yojson返回Int如果在OCaml中int`Intlit适合否则所以你需要对待所有的情况:

match json with 
| `Assoc [("xxx", `Intlit lit)] -> Int64.of_string lit 
| `Assoc [("xxx", `Int i)] -> Int64.of_int i 
+0

请看编辑 – romerun

+0

好吧,彻底改变了我的答案。 –

+0

啊,我明白了,Yojson.Safe会将其转换为'Intlit,如果这个数字大于'Int。这就是我错过的。 – romerun