Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Golang parse JSON array into data structure

Tags:

json

parsing

go

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

like image 225
Kiril Avatar asked Aug 23 '14 19:08

Kiril


2 Answers

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) } 
like image 155
Marko Kevac Avatar answered Oct 02 '22 13:10

Marko Kevac


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     }  } 
like image 30
Steve P. Avatar answered Oct 02 '22 14:10

Steve P.