【发布时间】:2021-08-26 08:32:16
【问题描述】:
当使用 Go 解析 JSON 时,如果一个值为 null 或缺失,是否可能会失败,而无需通过 if 语句检查每个字段? 例如:
package main
import (
"encoding/json"
"fmt"
)
type Bird struct {
Species string `json:"birdType"`
Description string `json:"what it does"`
}
func main() {
birdJson := `{"birdType": "pigeon"}`
var bird Bird
json.Unmarshal([]byte(birdJson), &bird)
fmt.Println(bird)
}
由于"what it does" 未定义,我预计会引发错误
【问题讨论】:
-
Go 不会抛出异常,你应该检查
json.Unmarshal返回的错误。不过,就您的问题而言,您正在寻找的功能不是由encoding/json实现的。您可以在完成解组后验证结构的字段。如果您需要相反的情况,即如果 json 包含未知字段,则返回错误,实际上是 possible。 -
所以我必须对每个字段都这样做?
-
没错。
-
有没有图书馆可以为我做到这一点?这似乎是一个相当大的功能缺失:/。另外,您能否添加一个答案以便我接受?
-
有些库可以做到这一点,我不使用它们中的任何一个,所以我不能推荐任何库,但是如果你搜索“go validate”或“validation”或类似的东西,你应该在结果中得到一堆建议。即使在 SO 上,许多使用这些库的人也经常发布有关它们的问题。