1 回答
TA贡献1876条经验 获得超7个赞
这是我的做法:
type Id int
func (i *Id) UnmarshalJSON(b []byte) error {
s := strings.Trim(string(b), `"`)
id, err := strconv.Atoi(s)
*i = Id(id)
return err
}
type Type struct {
Id Id `json:"id"`
Value string `json:"value"`
}
func getTypes(b []byte) ([]Type, error) {
var types = []Type{}
var obj struct {
Object struct {
Databases []struct {
Tables []struct {
Types []Type `json:"Types"`
} `json:"Tables"`
} `json:"Databases"`
} `json:"object"`
}
if err := json.Unmarshal(b, &obj); err != nil {
return nil, err
}
for _, d := range obj.Object.Databases {
for _, t := range d.Tables {
types = append(types, t.Types...)
}
}
return types, nil
}
func showTypes(types []Type) error {
return json.NewEncoder(os.Stdout).Encode(struct {
Types []Type `json:"Types"`
}{types})
}
func main() {
types, err := getTypes([]byte(data))
if err != nil {
log.Fatal(err)
}
if err := showTypes(types); err != nil {
log.Fatal(err)
}
}
就恒定时间而言,这是不可能的。
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报