将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

我有以下程序。我需要将JSON数据转换为对象类型缓存,该缓存包含一个map[string]string类型的字段。有一件事我做错了w.r.t.初始化map并解组JSON,但无法识别语法问题

注意:为了方便起见,我整理了数据以获得示例JSON数据

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