gpt4 book ai didi

json - 嵌入式结构的多态 JSON 解码

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

这是一个例子(另见 https://play.golang.org/p/or7z4Xc8tN ):

package main

import (
"encoding/json"
"fmt"
)

type A struct {
X string
Y int
}

type B struct {
A
Y string
}

func main() {
data := []byte(`{"X": "me", "Y": "hi"}`)
b := &B{}
json.Unmarshal(data, b)
fmt.Println(b)
fmt.Println(b.A)

b = &B{}
data = []byte(`{"X": "me", "Y": 123}`)
json.Unmarshal(data, b)
fmt.Println(b)
fmt.Println(b.A)
}

哪些输出:

&{{me 0} hi}
{me 0}
&{{me 0} }
{me 0}

有没有办法将字段 Y 多态解码为 int 或字符串?还是因为定义了 B.Y,甚至完全解码为 A.Y?

我知道有些人可能会建议使用 json.Unmarshall(data, &b.A) 之类的东西进行解码,但我不知道我是否可以将其融入我当前的设计中。

最佳答案

Go 唯一的多态是接口(interface)。嵌入不提供多态性。

如果您尝试解码 JSON,但您无法假设其中一个字段将是什么类型,您可以使用 interface{} 类型的字段以及类型断言, fmt.Sprint,或者反射。您应该使用哪个取决于特定的用例——一旦您获得了值(value),您将如何处理它?在某些时候,您必须关心它是 int 还是 string,这将决定您如何处理该值。

关于json - 嵌入式结构的多态 JSON 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44380095/

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