gpt4 book ai didi

json - 在 Go 中将组合对象转换为 json

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

我是 Go 的新手,不确定如何解决这个问题。在 OOP 术语中,我有一个基类 Animal 和两个子类 Cat 和 Dog。我想为 Animal 指定一个适用于所有动物的 ToJson 方法。

我的问题是,当我调用 dog.ToJson() 时,我只获得了 dog 的 Dog 属性,没有获得 Animal 属性。

如何让 ToJson 按预期工作(即 with recursion)?

编辑:更改代码以反射(reflect) lbonn 回答中的建议,我无法按我想要的方式工作。edit2:代码更改后的一致性问题

package main

import (
"encoding/json"
"fmt"
)

type Animal struct {
Name string
}

type Cat struct {
CatProperty int64
Animal
}

type Dog struct {
DogProperty int64
Animal
}

func ToJson(i interface{}) []byte {
data,err := json.Marshal(i)
if err != nil {
panic("???")
}
return data
}

func main() {
dog := Dog{}
dog.Name = "rex"
dog.DogProperty = 2
fmt.Println(string(ToJson(dog)))
// Prints {"DogProperty":2}
// I want it to print {"Name":"rex","DogProperty":2}
}

最佳答案

匿名字段的 Json 编码已从 go 1 中删除。希望它会在 go 1.1 中恢复。参见 https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/jYMHbEv44r4更多细节。

因此,您现在可以使用标准库(使用 go 1)获得的最好结果是 http://play.golang.org/p/LncNFeN8ys

您始终可以使用 skelterjohn 的补丁 https://github.com/skelterjohn/json/在 go 1.1 发布之前支持匿名字段。

或者使用提示,从已修复此问题的源安装。见https://codereview.appspot.com/6460044

关于json - 在 Go 中将组合对象转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078527/

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