如何将原始文本编组为 JSON?

问题描述 投票:0回答:1

这是文本文件的内容:

"{\"tpl\":\"key = ${key}\\nkey1 = ${key1}\",\"metadata\":[{\"key\":\"key\"},{\"key\":\"key1\"}],\"format\":\"text\"}"

如何将其解组到给定的结构中?

type templateMessage struct {
    TPL      string              `json:"tpl"`
    Metadata []map[string]string `json:"metadata"`
    Format   string              `json:"format"`
}

我试过这个:

func main() {
    var templateMsg templateMessage

    content, err := os.ReadFile("path-of-the-file/temp.txt")
    if err != nil {
        fmt.Println(err)
        return
    }

    err = json.Unmarshal(content, &templateMsg)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(templateMsg)
}

但这给了我以下错误:

json: cannot unmarshal string into Go value of type main.templateMessage

json go marshalling unmarshalling goland
1个回答
0
投票

文件内容采用 JSON 编码为 JSON。解码为字符串,然后将该字符串解码为结构体。

func main() {
    var templateMsg templateMessage

    content, err := os.ReadFile("temp.txt")
    if err != nil {
        fmt.Println(err)
        return
    }

    var s string
    err = json.Unmarshal(content, &s)
    if err != nil {
        fmt.Println(err)
        return
    }

    err = json.Unmarshal([]byte(s), &templateMsg)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(templateMsg)
}

https://go.dev/play/p/yrmfixY5OGE

© www.soinside.com 2019 - 2024. All rights reserved.