【问题标题】:Strict JSON parsing [duplicate]严格的 JSON 解析 [重复]
【发布时间】: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 上,许多使用这些库的人也经常发布有关它们的问题。

标签: json go


【解决方案1】:

不,如果目标结构具有源 json 不包含任何匹配对象键的字段,encoding/json.Unmarshal 将不会返回错误。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 2012-03-10
    • 2015-08-27
    • 2012-04-10
    • 2016-02-24
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多