将Struct转换为JSON,其中字段是另一个Struct

时间:2016-11-17 07:57:24

标签: json go bson

我有两个结构结构:

type A struct {
    Zip string `json:"zip"`
}

type B struct {
    Foo string `bson:"foo"`
    Bar A      `json:"bar"`
}

当我尝试json.Marshal B类型时,Bar字段无法正确转换。字段正常,但值始终为空。输出如下:

{"foo": "some-string-value", "bar": {"zip": ""}}

我做错了什么?

1 个答案:

答案 0 :(得分:4)

未填充A中的Zip字段。

type A struct {
    Zip string `json:"zip"`
}

type B struct {
    Foo string `bson:"foo"`
    Bar A      `json:"bar"`
} 
func main() {
    one := A{"35000"}
    two := B{"Foo", one}
    json, _ := json.Marshal(two)
    fmt.Printf("%s\n", json)
}

输出为(https://play.golang.org/p/kyG1YabpSe):

{"Foo":"Foo","bar":{"zip":"35000"}}

即使有地图

type A struct {
   Zip string `json:"zip"`
}
type B struct {
   Foo string `bson:"foo"`
   Bar A      `json:"bar"`
}
func main() {
   m := make(map[string]B)

   for x := 0; x < 10; x++ {
      m[strconv.Itoa(x)] = B{"Hello", A{"35000"}}
   }

   json, _ := json.Marshal(m)
   fmt.Printf("%s\n", json)
}

https://play.golang.org/p/qCsmAGzo4H

输出很好,我不明白你哪里错了。