gpt4 book ai didi

json - 如果对象返回为空字符串而不是空结构,如何解码 json 对象

转载 作者:行者123 更新时间:2023-12-01 21:15:59 25 4
gpt4 key购买 nike

我以 JSON 形式接收一些数据,但如果一个对象为空,它不会返回一个空结构,而是一个空
而是字符串,并且在解码时,它返回一个错误。

所以数据不是 {"key":{}}{"key":""}} ,即使使用 omitempty 字段也不起作用

示例:https://play.golang.org/p/N1iuWBxuo1C

type Store struct {
Title string `json:"title,omitempty"`
Item item `json:"item,omitempty"`
}
type item struct {
Price float32 `json:"price,omitempty"`
Kind string `json:"kind,omitempty"`
}

func main() {
var data1 Store
json1 := []byte(`{"title":"hello world","item":{"price":45.2,"kind":"fruit"}}`)
if err := json.Unmarshal(json1, &data1); err != nil {
log.Println("1, err: ", err)
return
}
log.Printf("data1: %+v\n", data1)
var data2 Store
json2 := []byte(`{"title":"hello world","item":{}}`)
if err := json.Unmarshal(json2, &data2); err != nil {
log.Println("2, err: ", err)
return
}
log.Printf("data2: %+v\n", data2)
var data3 Store
json3 := []byte(`{"title":"hello world","item":""}`)
if err := json.Unmarshal(json3, &data3); err != nil {
log.Println("3, err: ", err)
return
}
log.Printf("data3: %+v\n", data3)
}

最佳答案

你可以有你的item输入 json.Unmarshaler 界面。

func (i *item) UnmarshalJSON(data []byte) error {
if string(data) == `""` {
return nil
}

type tmp item
return json.Unmarshal(data, (*tmp)(i))
}

https://play.golang.org/p/1TrD57XULo9

关于json - 如果对象返回为空字符串而不是空结构,如何解码 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61425314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com