我正在使用一个JSON响应,它有时可以返回字符串或具有字符串键但值为字符串和布尔值的对象.我知道我需要实现我自己的数据解组程序
JSON情况示例:
caseOne := `"data": [
{"user": "usersName"}
]`
caseTwo := `"data": [
{"user": {"id": "usersId", "isActive": true}}
]`
我的代码:
package main
type Result struct {
Data []Item `json:"data"`
}
type Item struct {
User User `json:"user"`
}
type User struct {
user string
}
func (u *User) MarshalJSON() ([]byte, error) {
return json.Marshal(u.user)
}
func (u *User) UnmarshalJSON(data []byte) error {
var raw interface{}
json.Unmarshal(data, &raw)
switch raw := raw.(type) {
case string:
*u = User{raw}
case map[string]interface{}:
// how do I handle the other "isActive" key that is map[string]bool?
*u = User{raw["id"].(string)}
}
return nil
}
这个问题/答案:Here接近于回答我的用例,但我有点困惑于如何处理不同值类型的多个映射值.
目前的围棋playground : Here个