假设我有一个Go结构,带有JSON标记:
type Person struct {
Name string `json:"name"`
Age int `json:"age,omitifempty"`
Flags []string `json:"-"`
}
p := Person{ Name: "Bob", Age: 36, Flags: []string{"employed","father"} }
现在我想将其转换为通用map[string]interface{}
,例如我可能通过JSON从REST API接收:
p2 := map[string]interface{}{
"name": "Bob",
"age": 36,
}
我已经设计了以下函数来使用json包完成此操作。但是JSON字符串的中间步骤似乎是不必要和浪费的。
func ConvertJSONObject(input, output interface{}) error {
encoded, err := json.Marshal(input)
if err != nil {
return err
}
return json.Unmarshal(encoded, output)
}
现在我可以这样做:
var p2 map[string]interface{}
ConvertJSONObject(p, &p2)
作为额外的奖励,相同的功能反过来,将map[string]interface{}
转换为填充的结构:
var p Person
ConvertJSONObject(p2, &p)
是否有一个更简单的解决方案,它以与json包大致相同的方式来表达标签?