Golang parse JSON array into data structure

2019-01-18 02:06发布

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

标签: json parsing go
3条回答
▲ chillily
2楼-- · 2019-01-18 02:22

you can try the bitly's simplejson package
https://github.com/bitly/go-simplejson

it's much easier.

查看更多
放荡不羁爱自由
3楼-- · 2019-01-18 02:25

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
    } 
}
查看更多
在下西门庆
4楼-- · 2019-01-18 02:28

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)
}
查看更多
登录 后发表回答