gpt4 book ai didi

json - 我怎么知道该字段设置为空?

转载 作者:IT王子 更新时间:2023-10-29 01:54:21 26 4
gpt4 key购买 nike

如果json中的字段包含一个空值,我想输出一个错误。我该怎么做?我试过“编码/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

请帮忙。非常感谢!

最佳答案

如果你想控制一个类型的解码方式,你可以实现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
}

https://play.golang.org/p/MNDsQpfEJA

关于json - 我怎么知道该字段设置为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721470/

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