Golang中检查JSON指定键是否存在及赋值的实现方法
在Go中处理JSON结构体里的可选Email字段
核心思路
Go处理JSON可选字段时,主要取决于你定义的结构体字段类型,分三种常见场景处理:
场景1:结构体Email字段为普通string类型
如果你的INTaddress结构体中Email是普通string类型:
type INTaddress struct { Email string `json:"email"` // 其他字段... }
当JSON对象中没有email键时,json.Unmarshal会自动将Email初始化为空字符串,此时无需额外检查,直接赋值即可:
c := p.INTaddress[i].Email
场景2:结构体Email字段为指针类型(*string)
如果需要严格区分“字段不存在”和“字段值为空字符串”,可以将Email定义为指针类型:
type INTaddress struct { Email *string `json:"email"` // 其他字段... }
此时需要检查指针是否为nil,来判断字段是否存在,修改后的遍历代码如下:
for i, p := range jsonbody.Data { a := p.Name b := p.Phone[i].Mobile var c string // 检查Email字段是否存在(指针非空) if p.INTaddress[i].Email != nil { c = *p.INTaddress[i].Email } else { c = "" } d := p.Phone[i].Carrier e := p.Address[i].City // 后续业务逻辑... }
场景3:用map[string]interface{}解析JSON(无预定义结构体)
如果没有提前定义结构体,直接用map[string]interface{}解析JSON,可以通过键的存在性检查来处理:
// 假设INTaddress[i]是map[string]interface{}类型 emailVal, exists := p.INTaddress[i]["email"] var c string if exists { // 类型断言转换为string,可根据需要处理断言失败的情况 c, _ = emailVal.(string) } else { c = "" }
内容的提问来源于stack exchange,提问作者Vinay Kumar Rasala
相关产品推荐
相关产品推荐

