I am trying to decode a JSON array and put it in a slice of a struct. I've read how to do this, but only if the JSON array contains keys. My JSON array does not contain keys.
I have stripped the program down to only the part where it handles the JSON data. It compiles and can be found below.
package main
// 2014-04-19
import (
"fmt"
"encoding/json"
)
type itemdata struct {
data1 int // I have tried making these strings
data2 int
data3 int
}
func main() {
datas := []itemdata{}
json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas)
// I have tried the JSON string without the qoutes around the numbers
fmt.Println(len(datas)) // This prints '2'
fmt.Println("This prints") // This does print
for i := range datas {
fmt.Println(datas[i].data1) // This prints '0', two times
}
fmt.Println("And so does this") // This does print
}
I've searched for things like 'Go Lang JSON decode without keys' and read articles (and 'package pages') on the Go Lang website. I can find enough information on how to work with Go and JSON, but none of my found articles explain how to do it without keys in the JSON array.
I wouldn't find it odd if I would get an error; The JSON values are stringy-numbers (that's how I get them as input), but I am trying to put them in integers. I am not getting an error though. I have tried making the values in the 'itemdata' struct strings, that didn't help much. Removing the quotes from the JSON values didn't help either.
I would like to know how I can make my JSON array in a slice of 'itemdata'. The first out of three values would go into 'itemdata.data1', the second in 'itemdata.data2' and the third in 'itemdata.data3'.
Please let me know if you think I can improve my question.
Thanks in advance,
Remi
What you have here is a bi-dimensional array of strings. You can decode it like this :
type itemdata [][]string
func main() {
var datas itemdata
json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas)
fmt.Println(len(datas))
fmt.Println("This prints")
for i := range datas {
fmt.Println(datas[i][1])
}
fmt.Println("And so does this")
}
Demonstration
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With