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

当 json 输入结构错误时,Unmarshall 应该返回错误

当 json 输入结构错误时,Unmarshall 应该返回错误

Go
千巷猫影 2023-06-12 09:19:14
我有结构 A 和 B。当 JSON 字符串 A 被解组为结构 A 时它是有效的,但是如果 JSON 字符串 A 被解组为结构 B 它仍然是成功的(这不应该)。有什么方法可以检测到错误的 JSON 输入已被错误地转换为错误的结构类型吗?请看下面的代码:package mainimport (    "encoding/json"    "fmt")type A struct {    Name string `json:"name"`    Age  int    `json:"age"`}type B struct {    Alamat string `json:"alamat"`    Umur   int    `json:"umur"`}func main() {    var structA A    var structAA A    valA := "{\"name\":\"budi\",\"age\":10}"    valB := "{\"alamat\":\"jakarta\",\"umur\":120}"    //correct case    err := json.Unmarshal([]byte(valA), &structA)    if err != nil {        fmt.Println("fail unmarshal")    }    fmt.Println(structA.Name)    fmt.Println(structA.Age)    //unmarshalled successfully but with wrong json    err = json.Unmarshal([]byte(valB), &structAA)    if err != nil {        fmt.Println("fail unmarshal")    }    fmt.Println(structAA.Name)    fmt.Println(structAA.Age)}
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

默认情况下,参考文档json.Unmarshal(data []byte, v interface{}), 并不像您想象的那样工作:

默认情况下,没有相应结构字段的对象键将被忽略(参见 Decoder.DisallowUnknownFields 的替代方法)。

因此,JSON 属性alamatumur您的属性valB将被忽略,因为它们在结构中不匹配A并且被设置为它们的默认类型。nameage



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

添加回答

举报

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