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

将结构转换为JSON,其中字段是另一个结构,json,go,bson,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”:“一些字符串值”,“bar”:{“zip”:“}}} 我做错了什么?未填充A中的Zip字段 type A struc

我有两个结构:

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

type B struct {
    Foo string `bson:"foo"`
    Bar A      `json:"bar"`
}
当我尝试
json.Marshal
输入
B
类型时,
Bar
字段无法正确转换。字段正常,但值始终为空。输出如下所示:

{“foo”:“一些字符串值”,“bar”:{“zip”:“}}}


我做错了什么?

未填充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)
}
输出为():

即使有地图

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)
}
键入一个结构{
Zip字符串`json:“Zip”`
}
B型结构{
Foo字符串`bson:“Foo”`
Bar A`json:“Bar”`
}
func main(){
m:=make(映射[string]B)
对于x:=0;x<10;x++{
m[strconv.Itoa(x)]=B{“你好”,A{“35000”}
}
json,:=json.Marshal(m)
fmt.Printf(“%s\n”,json)
}


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

你在填充Zip字段吗?如何填充?所有字段
Bar
都填充了
A
的实例。并且该实例已填充了
Zip
。的Zip字段未填充。专注于找出原因。它是填充的。当我有一个
B
的实例时,我只需做B.Bar=a,
a
就是先前正确填充的
a
的一个实例。如果你
fmt.Printf(“%#v\n”,B)
,你会得到什么?我有一个
B
项的映射,当我尝试
json.marshall(myMap)
,你会得到什么,
字段中填充了空字符串值。@DanielRibeiro您能用观察到问题的确切代码更新您的问题吗?问题中没有提到
myMap
B
项目的地图。
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)
}