2 回答
TA贡献1875条经验 获得超3个赞
您可以使用出色的mapstructure库将 amap[string]interface{}转换为您想要的结构。这样,您只需将数据 JSON 解码为 map[string]interface{},然后将此映射解码为您需要的结构。
例子:
package main
import (
"fmt"
"encoding/json"
"github.com/mitchellh/mapstructure"
)
func main() {
myJson := "{\"name\": \"someName\", \"age\": 20, \"job\": \"teacher\"}"
myMap := make(map[string]interface{})
err := json.Unmarshal([]byte(myJson), &myMap)
if err != nil {
panic(err)
}
person := &Person{}
adult := &Adult{}
err = mapstructure.Decode(myMap, person)
if err != nil {
panic(err)
}
fmt.Printf("Person: %#v\n", person)
err = mapstructure.Decode(myMap, adult)
if err != nil {
panic(err)
}
fmt.Printf("Adult: %#v\n", adult)
}
// Structs
type Person struct {
Name string `mapstructure:"name" json:"name"`
Age int `mapstructure:"age" json:"age"`
}
type Adult struct {
Person `mapstructure:",squash"`
Job string `mapstructure:"job" json:"job"`
}
在Go Playground中查看它的实际效果。
TA贡献1801条经验 获得超16个赞
您可以编写函数映射Struct1到StructDetails
func ToStructDetails(s Struct1, d string) *StructDetails {
return &StructDetails{s, AddressDetails{d}}
}
除了进行映射之外,没有办法强制进行转换。
解组后的其他方式
s := Struct1{"name", "details"}
var sd StructDetails
sd.Struct1 = s
fmt.Println(sd) // {{name details} {}}
sd.details = AddressDetails{"address"}
fmt.Println(sd) // {{name details} {address}}
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报