为了账号安全,请及时绑定邮箱和手机立即绑定

对象数组的 JSON 解组因 nil 映射而崩溃

对象数组的 JSON 解组因 nil 映射而崩溃

Go
繁星coding 2023-02-28 20:38:56
我有以下最小复制,当此代码运行时它会在basicMap[key] = valuebecause处抛出异常assignment to entry in nil map,但是它仅在类型为[]CustomMap- 当我将 a 用于CustomMap单个项目时才执行此操作,它工作得很好。有没有办法在 go 中解组自定义对象数组?package mainimport "encoding/json"type CustomMap map[string]anytype Payload struct {    Items []CustomMap `json:"items"`}func mapToBasicMap(basicMap CustomMap, aMap map[string]any) {    for key, value := range aMap {        basicMap[key] = value    }}func (this CustomMap) UnmarshalJSON(data []byte) error {    var aMap map[string]any = make(map[string]any)    json.Unmarshal(data, &aMap)    mapToBasicMap(this, aMap)    return nil}func main() {    payload := Payload{}    json.Unmarshal([]byte("{\"items\":[{\"item1\": 1}]}"), &payload)}
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

Unmarshal 应该有一个指针接收器。在使用分配给它的值之前制作目标地图。


func (this *CustomMap) UnmarshalJSON(data []byte) error {

    var aMap map[string]any = make(map[string]any)

    json.Unmarshal(data, &aMap)

    *this = make(CustomMap)

    mapToBasicMap(*this, aMap)

    return nil

}

另一种修复方法是删除方法 CustomMap.UnmarshalJSON


查看完整回答
反对 回复 2023-02-28
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信