Golang将JSON数组解析为数据结构

Kir*_*ril 28 parsing json go

我试图解析包含JSON数据的文件:

[
  {"a" : "1"},
  {"b" : "2"},
  {"c" : "3"}
]
Run Code Online (Sandbox Code Playgroud)

由于这是一个带有动态密钥的JSON数组,我想我可以使用:

type data map[string]string
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用以下方法解析文件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
Run Code Online (Sandbox Code Playgroud)

解析包含JSON数据的文件的最简单方法是将数组(只有字符串类型的字符串)转换为Go结构?

编辑:为了进一步详细说明接受的答案 - 我的JSON确实是一组地图.为了使我的代码工作,该文件应包含:

{
  "a":"1",
  "b":"2",
  "c":"3"
}
Run Code Online (Sandbox Code Playgroud)

然后它可以读成一个 map[string]string

Mar*_*vac 21

试试这个: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)
}
Run Code Online (Sandbox Code Playgroud)

  • 这个`type mytype [] map [string] string`不应该是`mytype map [string] string`吗? (5认同)

Ste*_* P. 14

这是因为你的json实际上是一组地图,但是你正试图将其解组为a map.尝试使用以下内容:

type YourJson struct {
    YourSample []struct {
        data map[string]string
    } 
}
Run Code Online (Sandbox Code Playgroud)