回答

收藏

在 Go 中解组 json:必填字段?

技术问答 技术问答 192 人阅读 | 0 人回复 | 2023-09-12

使用 Go 解析 JSON 输入时找不到字段,可能会出错吗?
: i* k$ V' c1 T$ X我在文档中找不到。
# h$ \/ n9 r# G  X  O9 A根据需要指定字段是否有标签?
: g% L9 l: R) F' E% E                                                                0 U+ V  ^7 T/ T' G$ l  J" ^
    解决方案:                                                                " ^$ C4 |" _4 K9 v4 H- K3 i/ f
                                                                encoding/json包里没有必要的标签。你要么必须写你自己的MarshalJSON()方法,或事后检查缺失的字段。3 x0 E% C& e2 [- n
要检查缺失的字段,您必须使用指针来区分缺失/空值和零值:$ W- X. Z* N: P' }6 t- G1 q
    type JsonStruct struct    String *string    Number *float64}2 J$ m# r; W: D4 V0 e, k6 e
完整的工作示例:
8 z% Z3 k7 B+ e
    package mainimport  "fmt"    "encoding/json")type JsonStruct struct    String *string    Number *float64}var rawJson = []byte(`{    "string":"We do not provide a number"}`)func main()    var s *JsonStruct    err := json.Unmarshal(rawJson,&s)    if err != nil        panic(err)   }    if s.String == nil        panic("String is missing or null!")   }    if s.Number == nil        panic("Number is missing or null!")   }    fmt.Printf("String: %s  Number: %f\n",*s.String,*s.Number)}' d) j2 H* t+ h" J) k) m* |
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则