Golang parse JSON array into data structure
Solution 1
It's because your json is actually an array of maps, but you're trying to unmarshall into just a map
. Try using the following:
type YourJson struct {
YourSample []struct {
data map[string]string
}
}
Solution 2
Try this: http://play.golang.org/p/8nkpAbRzAD
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
)
type mytype []map[string]string
func main() {
var data mytype
file, err := ioutil.ReadFile("test.json")
if err != nil {
log.Fatal(err)
}
err = json.Unmarshal(file, &data)
if err != nil {
log.Fatal(err)
}
fmt.Println(data)
}
Solution 3
you can try the bitly's simplejson package
https://github.com/bitly/go-simplejson
it's much easier.
Comments
-
Kiril over 4 years
I am trying to parse a file which contains JSON data:
[ {"a" : "1"}, {"b" : "2"}, {"c" : "3"} ]
Since this is a JSON array with dynamic keys, I thought I could use:
type data map[string]string
However, I cannot parse the file using a
map
:c, _ := ioutil.ReadFile("c") dec := json.NewDecoder(bytes.NewReader(c)) var d data dec.Decode(&d) json: cannot unmarshal array into Go value of type main.data
What would be the most simple way to parse a file containing a JSON data is an array (only string to string types) into a Go struct?
EDIT: To further elaborate on the accepted answer -- it's true that my JSON is an array of maps. To make my code work, the file should contain:
{ "a":"1", "b":"2", "c":"3" }
Then it can be read into a
map[string]string