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