2

我有一个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)
}

加载一个带有内容的 JSON 文件{"bar":{"hello":"world"},"foo":{"bar":"new","baz":"extra"}},在上面的内容之后l.data就是map[]. 如何成功将此 JSON 解码为l.data

4

1 回答 1

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")
}
于 2013-05-27T00:06:00.860 回答