解组到地图

如何将数据解组到地图中?


JSON 是一个对象列表,我想在解组过程中将其转换为地图。但是,初始化地图似乎会创建一个未正确返回的新对象。


type foo struct {

    Id string `json:"id"`

    Name string `json:"name"`

}


type fooList []*foo

type fooMap map[string]*foo


func (f fooMap) UnmarshalJSON(data []byte) error {

    f := fooMap{} // required since map is not initialized


    var results fooList

    if err := json.Unmarshal(data, &results); err != nil {

        return err

    }


    for i := 0; i < len(results); i++ {

        result := results[i]

        f[result.Id] = result

    }


    return nil

}

我已经检查以确保没有错误并且地图在 Unmarshal 函数的末尾包含正确的值,但是当我查看结果应该被解组到的对象时,它是空的。下面是我如何解组父对象,它是包含 fooMaps 的结构片段。


type bar struct {

    Foos fooMap `json:"foos"`

}


type bars []*bar


...


var results bars

if err := json.Unmarshal(data, &results); err != nil {

    return err

}


// here results contains a single bar item (which is correct) but the Foos

// property does not exist at all

我还尝试更改Foos为类型*fooMap,然后将解组函数更新为,func (f *fooMap) UnmarshalJSON(...)但从未调用解组函数。


牛魔王的故事
浏览 147回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go