0
我很難搞清楚如何將JSON文件的「小節」加載到地圖元素中。背景:我想解組一個有些複雜的配置文件,它具有嚴格的結構,所以我認爲最好是解組成一個「靜態」結構而不是一個接口。解組成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)
}
的瓦爾斯地圖不是裝。我究竟做錯了什麼?謝謝你的幫助!
這裏有一個更好的例子:
{
"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)
}
感謝您的快速回復。這完全有道理......不幸的是我簡化了我的例子。的數據是更以下形式:'{ 「SET1」:{ 「一」:{ \t 「×」: 「11」 時, \t 「Y」: 「22」, \t 「Z」:「33 「 \t}, 」b「:{ \t 」×「: 」211「, \t 」Y「: 」222「, \t 」Z「: 」233「 \t}, 」C「:{ \t「x」:「311」, \t「y」:「322」, \t「z」:「333」 \t}, } }',我想創建一個結構圖 - 即map [string] StuctXType。 –
@JamesHaskell很酷,我爲你編輯了更多關於模型的文章:D – evanmcdonnal
再次感謝 - 我真的很感謝你的幫助。上面列出的路徑是我從昨天開始一直在嘗試的,但它不適用於我......不知道爲什麼,如果我有我錯過了或錯過了一個錯字。我將我的修改過的代碼發佈爲我的原始編輯...我得到的結果是:'JSON:{FirstSet:map []}'。任何額外的想法?或者你能爲我發佈一個完整的工作示例嗎?非常感謝。我很開心學習去... –