回答

收藏

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

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

使用 Go 解析 JSON 输入时找不到字段,可能会出错吗?
6 f6 [2 T( e3 `1 ^. r* D! r我在文档中找不到。( D/ y/ w, {+ t: ]% D: F5 A; t2 A
根据需要指定字段是否有标签?
7 a  d$ s! h' k" N+ Q% M                                                               
7 h4 }; j* E. l/ Q, v    解决方案:                                                               
+ p1 o1 C  Q5 k2 a3 V% F" v                                                                encoding/json包里没有必要的标签。你要么必须写你自己的MarshalJSON()方法,或事后检查缺失的字段。3 G+ b' \: t& K" C: e; y$ F& k
要检查缺失的字段,您必须使用指针来区分缺失/空值和零值:, |) S; A% l+ W: p
    type JsonStruct struct    String *string    Number *float64}; Q: T/ _% I% q
完整的工作示例:
. e6 a. h- A% L% g6 U+ B4 [6 w& S) R
    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)}4 E/ _' W$ u+ y* b' }
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则