2012-06-12 17 views
7

Estoy tratando de analizar una secuencia json en Go. He creado un ejemplo simplificado:json análisis de int64 en go; valores nulos

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) 
} 

esto me dará

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

He encontrado un Int64 anulable en el sql package, pero JSON no parece ser capaz de manejar la situación.

¿Hay un tipo de int 64 que se puede nullable que json puede manejar? Si es posible, me alegraría que el json nulo esté traducido a, -1 o MinValue.

Gracias por su entrada, Fabian

+0

La próxima vez, el ejemplo puede acortarse a 'var n int64' y' json.Unmarshal ("2251799813685312", & n) ' –

+0

solo quiero que sepan, probado con Go 1.1.2," nulo "puede ser usar con int tipo – nvcnvn

Respuesta

13

sólo tiene que utilizar un *int64. Un puntero puede ser nulo o puede apuntar a un int64 con un valor asociado y funcionan bien con el paquete JSON de Go.

+0

espléndido! Gracias, ni siquiera pensé en eso: / – kazamatzuri