如果json中的字段包含null值,我想输出错误。我该怎么做?我试过" encoding / json"。也许我需要另一个图书馆。
代码示例:
package main
import (
"encoding/json"
"fmt"
"strings"
)
type Item struct {
Value *int
}
func main() {
var jsonBlob = `[
{},
{"Value": null},
{"Value": 0},
{"Value": 1}
]`
var items []Item
err := json.NewDecoder(strings.NewReader(jsonBlob)).Decode(&items)
if err != nil {
fmt.Println("error:", err)
}
for _, a := range items {
if a.Value != nil {
fmt.Println(*a.Value)
} else {
fmt.Println(a.Value)
}
}
}
我得到了:
<nil>
<nil>
0
1
我想:
<nil>
<error>
0
1
请帮忙。非常感谢!
答案 0 :(得分:4)
如果要控制类型的解组方式,可以实现json.Unmarshaler
由于地图允许您区分未设置值和null
值,因此首先解组为通用map[string]interface{}
将允许您在不标记JSON的情况下检查值。
type Item struct {
Value *int
}
func (i *Item) UnmarshalJSON(b []byte) error {
tmp := make(map[string]interface{})
err := json.Unmarshal(b, &tmp)
if err != nil {
return err
}
val, ok := tmp["Value"]
if ok && val == nil {
return errors.New("Value cannot be nil")
}
if !ok {
return nil
}
f, ok := val.(float64)
if !ok {
return fmt.Errorf("unexpected type %T for Value", val)
}
n := int(f)
i.Value = &n
return nil
}