我想将以下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没有括号,所以我怀疑这个问题与它们有关。
有人可以帮忙吗?
答案 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"`
}