我有map[string]map[string]string
我希望能够转换为JSON并写入文件,并能够从文件中读回数据。
我已经能够使用以下内容成功写入文件:
func (l *Locker) Save(filename string) error {
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
encoder := json.NewEncoder(file)
// l.data is of type map[string]map[string]string
return encoder.Encode(l.data)
}
我无法将JSON加载回地图。我尝试了以下内容:
func (l *Locker) Load(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
decoder := json.NewDecoder(file)
return decoder.Decode(l.data)
}
加载包含内容{"bar":{"hello":"world"},"foo":{"bar":"new","baz":"extra"}}
的JSON文件,在上述内容之后,l.data
的内容仅为map[]
。如何将此JSON成功解码为l.data
?
答案 0 :(得分:3)
如果您使用json.Unmarshal()
,则可以传递一个数据结构来填充。以下是playground中代码的链接。
package main
import (
"fmt"
"encoding/json"
)
func main() {
src_json := []byte(`{"bar":{"hello":"world"},"foo":{"bar":"new","baz":"extra"}}`)
d := map[string]map[string]string{}
_ = json.Unmarshal(src_json, &d)
// Print out structure
for k, v := range d {
fmt.Printf("%s\n", k)
for k2, v2 := range v {
fmt.Printf("\t%s: %s\n", k2, v2)
}
}
fmt.Println("Hello, playground")
}