gpt4 book ai didi

json - 当 json 输入结构错误时,Unmarshall 应该返回错误

转载 作者:IT王子 更新时间:2023-10-29 02:30:59 25 4
gpt4 key购买 nike

我有结构 A 和 B。当 JSON 字符串 A 被解码为结构 A 时它是有效的,但是如果 JSON 字符串 A 被解码为结构 B 它仍然是成功的(这不应该)。

有什么方法可以检测到错误的 JSON 输入被错误地转换为错误的结构类型?

请看下面的代码:play

package main

import (
"encoding/json"
"fmt"
)

type A struct {
Name string `json:"name"`
Age int `json:"age"`
}

type B struct {
Alamat string `json:"alamat"`
Umur int `json:"umur"`
}

func main() {
var structA A
var structAA A

valA := "{\"name\":\"budi\",\"age\":10}"
valB := "{\"alamat\":\"jakarta\",\"umur\":120}"

//correct case
err := json.Unmarshal([]byte(valA), &structA)
if err != nil {
fmt.Println("fail unmarshal")
}

fmt.Println(structA.Name)
fmt.Println(structA.Age)

//unmarshalled successfully but with wrong json
err = json.Unmarshal([]byte(valB), &structAA)
if err != nil {
fmt.Println("fail unmarshal")
}

fmt.Println(structAA.Name)
fmt.Println(structAA.Age)

}

最佳答案

指的是 docs , json.Unmarshal(data []byte, v interface{}),默认情况下,并没有按照你想的那样工作:

By default, object keys which don't have a corresponding struct field are ignored (see Decoder.DisallowUnknownFields for an alternative).

因此,valB 中的 JSON 属性 alamatumur 将被忽略,因为它们在结构 A 中不匹配> 和 nameage 被设置为它们的默认类型。

关于json - 当 json 输入结构错误时,Unmarshall 应该返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54821746/

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