gpt4 book ai didi

json - 将 JSON 对象中的两个值连接到 Go 中的 map[string]bool

转载 作者:IT王子 更新时间:2023-10-29 02:37:02 26 4
gpt4 key购买 nike

我正在尝试将两个值(door 和 access)从一个 JSON 对象连接到一个 map[string]bool 中,它在一个结构中声明。现在,我收到错误:

json: cannot unmarshal string into Go struct field Data.pasted of type map[string]bool

结构定义如下:

type AccessControl struct{
SessionId string `json:"sessionId"`
DoorAccess map[string]bool
}

我从服务器获取的 JSON 对象是:

{
"sessionId": "232",
"door": "Main Door",
"access": true
}

这是我的职能:

func handler(w http.ResponseWriter, r *http.Request){
var data AccessControl
err := json.NewDecoder(r.Body).Decode(&data)
}

最佳答案

你的 json 和你的结构不代表同一个对象你的结构应该如下:

    type AccessControl struct {
SessionID string `json:"sessionId"`
Door string `json:"door"`
Access bool `json:"access"`
}

对于您要求的“完整示例”:

type ServerAccessControl struct {
SessionID string `json:"sessionId"`
Door string `json:"door"`
Access bool `json:"access"`
}

type AccessControl struct {
SessionId string `json:"sessionId"`
DoorAccess map[string]bool
}

func main() {
jsn := `{ "sessionId": "232", "door": "Main Door", "access": true }`
var data ServerAccessControl
json.Unmarshal([]byte(jsn), &data)
accessControl := ServerAccessControlToAccessControl(&data)
fmt.Println(accessControl)

}

//ServerAccessControlToAccessControl convert a access control obj from the server into a map based struct.
func ServerAccessControlToAccessControl(fromServer *ServerAccessControl) AccessControl {
var accessControl AccessControl
accessControl.SessionId = fromServer.SessionID
accessControl.DoorAccess = make(map[string]bool)
accessControl.DoorAccess[fromServer.Door] = fromServer.Access
return accessControl
}

我创建了 ServerAccessControl 结构,它表示您从服务器获取的 json 和您想要的访问控制类。

重要的是您会注意到您没有从服务器获取集合,如果您打算在 map 中添加更多门,您将需要自己实现逻辑。

关于json - 将 JSON 对象中的两个值连接到 Go 中的 map[string]bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51938541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com