Go 展平结构并将其转换为map[string]字符串
我有各种不同的嵌套结构,例如:Go 展平结构并将其转换为map[string]字符串,go,Go,我有各种不同的嵌套结构,例如: type MyInnerType struct { hello int } type MyType struct { foo string bar MyInnerType } x = &MyType{ foo: "hi" bar: MyInnerType{hello: 1} } 使用这样的声明,例如: type MyInnerType struct { hello int } type MyT
type MyInnerType struct {
hello int
}
type MyType struct {
foo string
bar MyInnerType
}
x = &MyType{
foo: "hi"
bar: MyInnerType{hello: 1}
}
使用这样的声明,例如:
type MyInnerType struct {
hello int
}
type MyType struct {
foo string
bar MyInnerType
}
x = &MyType{
foo: "hi"
bar: MyInnerType{hello: 1}
}
我想将其转换为map[string]string
的扁平映射,如下所示:
{"foo":"hi", "hello":"1"}
我认为这必须以递归方式进行,但将各种值转换为字符串
也是一个问题。我发现这有助于解决这个问题,但还没有找到任何解决方案
有这样的图书馆吗?如果没有,我能为自己做些什么来解决这个问题?有很多方法可以将这些类型(或类似形状的类型)转换为所需的JSON 最简单的方法是如下所示重新定义结构,然后默认的JSON封送拆收器将执行您想要的操作:
type MyInnerType int
type MyType struct {
Foo string `json:"foo"`
Bar MyInnerType `json:"hello"`
}
如果确实希望保留定义的结构,则可以通过如下方法实现自定义JSON封送拆收器:
type MyInnerType struct {
hello int
}
func (mit MyInnerType) MarshalJSON() ([]byte, error) {
return []byte(strconv.Itoa(mit.hello)), nil
}
type MyType struct {
Foo string `json:"foo"`
Bar MyInnerType `json:"hello"`
}
func main() {
x := &MyType{
Foo: "hi",
Bar: MyInnerType{hello: 1},
}
bs, err := json.Marshal(x)
if err != nil {
panic(err)
}
fmt.Println(string(bs))
// {"foo":"hi","hello":1}
}
“标准库中没有任何东西可以为您这样做。@阿德里安,补充了一个问题,很抱歉不清楚。要求我们推荐或查找一本书、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。我非常好奇,你为什么要这么做。您将丢失有关数据类型的所有信息,当进一步处理数据时,您将丢失go type系统在类型安全和类型检查中提供的所有信息。如果你想要的是json,maerics有你在下面寻找的答案。