栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解组到接口{}中,然后执行类型声明

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解组到接口{}中,然后执行类型声明

功能文档

json
中显示了包解组到的默认类型
Unmarshal

bool, for JSON booleansfloat64, for JSON numbersstring, for JSON strings[]interface{}, for JSON arraysmap[string]interface{}, for JSON objectsnil for JSON null

由于您要编组为

interface{}
,因此返回的类型将仅来自该集合。该
json
软件包不了解
Something1
Something2
。您需要从将
map[string]interface{}
json对象解组为的转换,或者直接解组为所需的struct类型。

如果您不想从通用接口中解压缩数据,或者以某种方式标记数据以便知道期望的类型,则可以迭代地获取json并尝试将其解编为所需的每种类型。

您甚至可以将它们打包到包装结构中,为您进行拆封:

type Something1 struct {    Thing      string `json:"thing"`    OtherThing int64  `json:"other_thing"`}type Something2 struct {    Croc  int  `json:"croc"`    Odile bool `json:"odile"`}type Unpacker struct {    Data       interface{}}func (u *Unpacker) UnmarshalJSON(b []byte) error {    smth1 := &Something1{}    err := json.Unmarshal(b, smth1)    // no error, but we also need to make sure we unmarshaled something    if err == nil && smth1.Thing != "" {        u.Data = smth1        return nil    }    // abort if we have an error other than the wrong type    if _, ok := err.(*json.UnmarshalTypeError); err != nil && !ok {        return err    }    smth2 := &Something2{}    err = json.Unmarshal(b, smth2)    if err != nil {        return err    }    u.Data = smth2    return nil}

http://play.golang.org/p/Trwd6IShDW



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号