无法将JSON解组为struct

时间:2017-01-27 18:32:37

标签: go

我想将以下JSON解组为结构:

{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}

我试图以各种方式修改jsonStruct,但结构总是空的:

package main

import (
    "encoding/json"
    "fmt"
)

type jsonStruct struct {
    main struct {
        data []struct {
            Key1 string `json:"KEY1"`
            Key2 string `json:"KEY2"`
            Key3 int    `json:"KEY3"`
            Key4 string `json:"KEY4"`
            Key5 string `json:"KEY5"`
            Key6 string `json:"KEY6"`
            Key7 string `json:"KEY7"`
       } `json:"data"`
    } `json:"MAIN"`
}

func main() {
    jsonData := []byte(`{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}`)

    var js jsonStruct

    err := json.Unmarshal(jsonData, &js)
    if err != nil {
            panic(err)
    }

    fmt.Println(js)
}

输出:

{{[]}}

我过去使用过的JSON没有括号,所以我怀疑这个问题与它们有关。

有人可以帮忙吗?

https://play.golang.org/p/pymKbOqcM-

1 个答案:

答案 0 :(得分:7)

这种情况正在发生,因为其他软件包(encoding/json)无法访问私有字段(即使使用反射)。在go中,私有字段是以小写字符开头的字段。要解决此问题,请使您的结构包含公共字段(以大写字母开头):

type jsonStruct struct {
    Main struct {
        Data []struct {
            Key1 string `json:"KEY1"`
            Key2 string `json:"KEY2"`
            Key3 int    `json:"KEY3"`
            Key4 string `json:"KEY4"`
            Key5 string `json:"KEY5"`
            Key6 string `json:"KEY6"`
            Key7 string `json:"KEY7"`
       } `json:"data"`
    } `json:"MAIN"`
}

https://play.golang.org/p/lStXAvDtpZ