2012-06-12 14 views
7

Próbuję parsować strumień json w Go. Utworzyłem uproszczony przykład:json parsowanie int64 w trybie go; wartości null

package main 
import (
    "encoding/json" 
    "fmt" 
) 

var d = []byte(`{ "world":[{"data": 2251799813685312}, {"data": null}]}`) 

type jsonobj struct{ World []World } 
type World struct{ Data int64 } 

func main() { 
    var data jsonobj 
    jerr := json.Unmarshal(d, &data) 
    fmt.Println(jerr) 
} 

to da mi

go run testmin.go 
json: cannot unmarshal null into Go value of type int64 

Znalazłem zerowalne Int64 w sql package, ale json nie wydaje się być w stanie go obsłużyć.

Czy istnieje typ n64 z możliwością zerowania, który może obsłużyć json? Jeśli to możliwe, byłbym szczęśliwy, gdyby json null został przetłumaczony na wartość -1 lub MinValue.

Dziękuję za wejście, Fabian

+0

Następnym razem przykład można skrócić do 'var n int64' i' json.Unmarshal ("2251799813685312", & n) ' –

+0

po prostu chcę, żebyście wiedzieli, przetestowani z Go 1.1.2," null "może być używać z int typ – nvcnvn

Odpowiedz

13

Wystarczy użyć *int64. Wskaźnik może być albo zerowy albo może wskazywać na int64 z powiązaną wartością i działa dobrze z pakietem Go JSON.

+0

wspaniały! Dzięki, nawet o tym nie pomyślałem: / – kazamatzuri