将JSON解组到映射的结构
我有以下程序。我需要将JSON数据转换为对象类型缓存,该缓存包含一个map[string]string类型的字段。有一件事我做错了w.r.t.初始化map并解组JSON,但无法识别语法问题 注意:为了方便起见,我整理了数据以获得示例JSON数据将JSON解组到映射的结构,json,dictionary,go,struct,unmarshalling,Json,Dictionary,Go,Struct,Unmarshalling,我有以下程序。我需要将JSON数据转换为对象类型缓存,该缓存包含一个map[string]string类型的字段。有一件事我做错了w.r.t.初始化map并解组JSON,但无法识别语法问题 注意:为了方便起见,我整理了数据以获得示例JSON数据 package main import ( "fmt" "encoding/json" "strconv" ) const data = `{"Mode&q
package main
import (
"fmt"
"encoding/json"
"strconv"
)
const data = `{"Mode":{"ID-1":"ON","ID-2":"OFF","ID-3":"ON"}}`
type Cache struct {
Mode map[string]string `json:"Mode"`
}
func main() {
jsonData, _ := json.Marshal(data)
fmt.Println(strconv.Unquote(string(jsonData)))
var c Cache
c.Mode = make(map[string]string) //I want to initialise map so that I can store data in next step, but this is wrong I know
c.Mode["ID-4"] = "ON" //Want to store data like this
json.Unmarshal(jsonData, &c)
fmt.Println(c) //I am getting output as nil map i.e. {map[]}
for k, v := range c.Mode {
fmt.Println(k, v) //I am getting NO output i.e. blank
}
}
这是您的代码修复(附上副本) 以下是输出:
{map[ID-1:ON ID-2:OFF ID-3:ON ID-4:ON]}
ID-2 OFF
ID-3 ON
ID-4 ON
ID-1 ON
您正在解组一个json编码的字符串。只需解组json输入:
json.unmarshal([]字节(数据),&c)
从json返回的错误。解组解释了问题。总是检查错误。通过解码原始JSON文档而不是对包含文档的字符串进行JSON编码来修复此问题。
{map[ID-1:ON ID-2:OFF ID-3:ON ID-4:ON]}
ID-2 OFF
ID-3 ON
ID-4 ON
ID-1 ON