首页  >  文章  >  后端开发  >  Go 中何时 `json.Unmarshal` 返回错误?

Go 中何时 `json.Unmarshal` 返回错误?

Patricia Arquette
Patricia Arquette原创
2024-11-10 11:00:03429浏览

When Does `json.Unmarshal` Return an Error in Go?

Go 中 JSON Unmarshal to Structure 何时返回错误?

Go 中,json.Unmarshal 函数尝试解码 JSON 格式字节到目标数据结构。虽然它成功解析并填充源 JSON 中具有匹配名称的字段,但当值与目标结构不对应时,它不会引发错误。

但是,json.Unmarshal 在以下情况下会遇到错误:

语法错误:

如果 JSON 输入在语法上不正确, json.Unmarshal 将返回错误。例如,如果缺少必需的引号,解码器将无法解析 JSON。

type A struct {
    Name string `json:"name"`
}
data := []byte(`{"name":what?}`)
err := json.Unmarshal(data, &a)
fmt.Println(err)  // prints character 'w' looking for beginning of value

JSON 值无法由目标类型表示:

如果JSON值的类型无法转换为目标结构中相应字段的类型,json.Unmarshal将返回错误。例如,如果尝试将 JSON 布尔值分配给字符串字段:

data := []byte(`{"name":false}`)
type B struct {
  Name string `json:"name"`
}
var b B
err = json.Unmarshal(data, &b)
fmt.Println(err) // prints cannot unmarshal bool into Go value of type string

其他实现细节:

除了语法和类型转换错误之外, json.Unmarshal 也可能在其他不常见的情况下返回错误。请参阅 Go 文档以获取更详尽的列表。

以上是Go 中何时 `json.Unmarshal` 返回错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn