json parsing of int64 in go; null values
Asked Answered
L

2

12

I'm trying to parse a json stream in Go. I've created a simplified example:

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

this will give me

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

I've found a nullable int64 in the sql package, but json doesn't seem to be able to handle it.

Is there a nullable int64 type that json can handle? If possible I'd be happy with the json null being translated to, -1 or MinValue.

Thank you for your input, Fabian

Loop answered 12/6, 2012 at 13:58 Comment(2)
Next time, the example can be shortened to var n int64 and json.Unmarshal("2251799813685312", &n)Pintle
just want you guys to know, tested with Go 1.1.2, "null" can be use with int typeBurroughs
L
28

Just use a *int64. A pointer can either be nil or it can point to an int64 with an associated value and they work fine with Go's JSON package.

Lothians answered 12/6, 2012 at 14:2 Comment(2)
splendid! Thanks, I didn't even think of that :/Loop
Is this a Golang community recommended approach? Wouldn't there be problems down the line since any other data transformations down the line would always need to check for nil type. It could also slow things down. Ex: You have field1 and field2. You want to create field3 by concatenating field1 and field2. If field2 is nil, cancel.Rb
D
1

The https://github.com/guregu/null contains null.Int null.String etc. with corresponding JSON serialization/deserialization.

Delineation answered 22/11, 2020 at 22:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.