2014-03-07 100 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