Golang jsonable指向切片中不同结构的指针

时间:2014-07-11 20:30:12

标签: json pointers struct go

我的golang程序具有这种结构结构:

type JSONDoc struct {
     Count  int         `json:"count"`
     Objects []uintptr  `json:"objects"`
}

type ObjectA struct {
     FieldA string
}

type ObjectB struct {
     FieldB string
}

我不知道JSONDoc.Objects中可以有哪些对象类型,我需要在json数组中存储多个结构。 Reflect返回指向结构的指针,我将它们附加到struct,但结果json中的encoding/json包用整数地址替换指针。 同样不安全.Pointer也不能被encoding/json解析。

只想让结果json看起来像

{
     "count":2, 
     "objects":
     [
         {"FieldA":"..."}, 
         {"FieldB":"..."}
     ]
}

如何存储指向正确编码为json的结构的指针?

1 个答案:

答案 0 :(得分:2)

您可以使用interface{},例如:

type JSONDoc struct {
    Count   int           `json:"count"`
    Objects []interface{} `json:"objects"`
}

func main() {
    doc := JSONDoc{Count: 2}
    doc.Objects = append(doc.Objects, &ObjectA{"A"}, &ObjectB{"B"}) 
    b, err := json.MarshalIndent(&doc, "", "\t")
    fmt.Println(string(b), err)
}

playground