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

将json字符串解组到具有结构本身一个元素的结构

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

将json字符串解组到具有结构本身一个元素的结构

您的JSON输入不是的一部分

DBS
,因为还有另一个JSON对象包装器,并且值
DBS
属于属性
"db"

更深入地讲,

"replicaps"
是一个JSON数组,其中的对象持有不同的键,其值可由表示
DBS

因此,要完全描述您的JSON,您需要某种“动态”类型。例如,地图就是这种动态类型。

因此,您的原始JSON输入可以使用类型完全建模

[]map[string]DBS
。这是一张地图,因为您的JSON输入包含一个JSON数组。映射键可以对任何属性名称进行建模,并且值是由
DBS
struct建模的JSON对象。

请参见下面的示例,该示例完全解析JSON输入:

type DBS struct {    URL      string`json:"url"`    Port     string`json:"port"`    Uname    string`json:"uname"`    Pass     string`json:"pass"`    Authdb   string`json:"authdb"`    Replicas []map[string]DBS `json:"replicas"`}func main() {    var dbs []map[string]DBS    if err := json.Unmarshal([]byte(src), &dbs); err != nil {        panic(err)    }    fmt.Printf("%+v", dbs)}

注意正确的标记语法(例如

json:"url"
)。

输出(在Go Playground上尝试):

[map[db:{URL:mongodb://localhost Port:27000 Uname: Pass: Authdb:Replicas:[map[rs01:{URL:mongodb://localhost Port:27001 Uname: Pass: Authdb:Replicas:[]}] map[rs02:{URL:mongodb://localhost Port:27002 Uname: Pass:Authdb: Replicas:[]}]]}]]

请注意,您可以进一步对始终为的第一个级别建模

"db"
,并且我们可以切换到指针(在第一个示例中我使用了非指针,因此打印的结果可读):

type DBReplicated struct {    DB *DBS `json:"db"`}type DBS struct {    URL      string `json:"url"`    Port     string `json:"port"`    Uname    string `json:"uname"`    Pass     string `json:"pass"`    Authdb   string `json:"authdb"`    Replicas []map[string]*DBS `json:"replicas"`}func main() {    var dbs []*DBReplicated    if err := json.Unmarshal([]byte(src), &dbs); err != nil {        panic(err)    }    db := dbs[0].DB    fmt.Printf("%+vn", db)    for _, dbs := range db.Replicas {        for name, replica := range dbs { fmt.Printf("%s: %+vn", name, replica)        }    }}

输出(在Go Playground上尝试):

&{URL:mongodb://localhost Port:27000 Uname: Pass: Authdb: Replicas:[map[rs01:0x10538200] map[rs02:0x10538240]]}rs01: &{URL:mongodb://localhost Port:27001 Uname: Pass: Authdb: Replicas:[]}rs02: &{URL:mongodb://localhost Port:27002 Uname: Pass: Authdb: Replicas:[]}


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

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

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