我无法弄清楚如何将 JSON 文件的“子部分”加载到地图元素中。背景:我试图解组具有严格结构的有点复杂的配置文件,因此我认为最好解组为“静态”结构而不是接口{}。
例如,这是一个简单的 JSON 文件:
{
"set1": {
"a":"11",
"b":"22",
"c":"33"
}
}
此代码有效:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type JSONType struct {
FirstSet ValsType `json:"set1"`
}
type ValsType struct {
A string `json:"a"`
B string `json:"b"`
C string `json:"c"`
}
func main() {
file, e := ioutil.ReadFile("./test1.json")
if e != nil {
fmt.Println("file error")
os.Exit(1)
}
var s JSONType
json.Unmarshal([]byte(file), &s)
fmt.Printf("\nJSON: %+v\n", s)
}
但这不会:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type JSONType struct {
FirstSet ValsType `json:"set1"`
}
type ValsType struct {
Vals map[string]string
}
func main() {
file, e := ioutil.ReadFile("./test1.json")
if e != nil {
fmt.Println("file error")
os.Exit(1)
}
var s JSONType
s.FirstSet.Vals = map[string]string{}
json.Unmarshal([]byte(file), &s)
fmt.Printf("\nJSON: %+v\n", s)
}
未加载 Vals 地图。我究竟做错了什么?谢谢你的帮助!
这是一个更好的例子:
{
"set1": {
"a": {
"x": "11",
"y": "22",
"z": "33"
},
"b": {
"x": "211",
"y": "222",
"z": "233"
},
"c": {
"x": "311",
"y": "322",
"z": "333"
},
}
}
代码:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type JSONType struct {
FirstSet map[string]ValsType `json:"set1"`
}
type ValsType struct {
X string `json:"x"`
Y string `json:"y"`
Z string `json:"z"`
}
func main() {
file, e := ioutil.ReadFile("./test1.json")
if e != nil {
fmt.Println("file error")
os.Exit(1)
}
var s JSONType
json.Unmarshal([]byte(file), &s)
fmt.Printf("\nJSON: %+v\n", s)
}
摇曳的蔷薇
相关分类