2014-03-07 6 views
3

이 이해 {{xxx ": 1000000000000000}은 (는) 유효합니까?Yojson이 int64 (ocaml)을 구문 분석합니다

Yojson.Safe로 구문 분석하는 방법을 잘 모릅니다. 나는 Int64 of int64 _와 같은 것을 찾고있다. 그러나 아무 것도 제공하지 않는다. int에는 int _ 및 _ int가 문자열 _의 _ 밖에 없다.

편집이 내 문제

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

입니다 JSON의 유형은 그렇지 않으면 OCaml의 int`Intlit에 맞는 경우

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

답변

3

그것은 Yojson 보인다는 Int를 반환하기 때문에이 일치하지 않습니다 그래서 모든 경우를 다룰 필요가 있습니다 :

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는 숫자가 Int보다 큰 경우 Intlit로 변환합니다. 그게 내가 놓친거야. – romerun