Golang结构和Json之间的动态转换

Golang结构和Json之间的动态转换,json,go,Json,Go,我想知道是否有一种方法可以在不使用数组的情况下动态扩展结构中共享相同数据类型的条目数 例如: type MyHouse struct{ Bedroom *Bedroom `json:"bedroom"` Kitchen *Kitchen `json:"Kitchen"` } type Kitchen struct{ Sink *Sink `json:"sink"` Oven *Oven `json:"oven"` } type Oven struct{ Brand string `jso

我想知道是否有一种方法可以在不使用数组的情况下动态扩展结构中共享相同数据类型的条目数

例如:

type MyHouse struct{
Bedroom *Bedroom `json:"bedroom"`
Kitchen *Kitchen `json:"Kitchen"`
}

type Kitchen struct{
Sink *Sink `json:"sink"`
Oven *Oven `json:"oven"`
}

type Oven struct{
Brand   string `json:"brand"`
HobSize []int  `json:"hobs"`

type Sink struct{
Volume int `json:"volume"`
}

type Bedroom struct{
Bed   *Bed   `json:"bed"`
Table *Table `json:"table"`
}

type Bed struct{
Brand string `json:"brand"`
Size  String `json:"size"`

type Table struct{
Brand       string `json:"brand"`
Legs        int    `json:"legs"`
SurfaceArea int    `json:"SurfacceArea"`
Draws       []Draws`json:"draws"`
}

type Draws struct{
Depth  int `json:"depth"`
Width  int `json:"width"`
Length int `json:"length"`
}
func main() { 
res := &MyHouse{
 Bedroom: &Bedroom{ 
  Bed: &Bed{
            Brand: "Sleepy",
            Size : "King"},
  Table: &Table{
              Brand    : "TabelY"
              Legs     : 1
              SurfaceAr: 32
              Draws    : []Draws{
                               {
                                Depth  :10
                                Width  :10
                                Length :10
                                },
                                {  
                                Depth  :20
                                Width  :10
                                Length :10   
                                }
                               }
                              }
                             }                   
Kitcken: &Kitchen{
 Oven: &Oven{
   Brand: "Bake right",
   hobs: []int{12,12,24,24}
}
Sink: &Sink{
 Volume: 56
}
}
}
restopring, _ := json.Marshal(res)

    fmt.Println(string(resprint)) 
}
如果我想简单地改变这些值,只需简单地打印出其中的内容就可以了,我可以将硬编码的值交换为变量(我不只是为了保持简单)

我希望能够在卧室中添加另一张具有完全相同数据(不同值)的表,而无需将这些表转换为一组表(房间中的表实际上是相同的),这样我就可以打印json,格式如下:

{主卧:(所有相关资料)},{SpareBedroom:(自己的资料)}

此外,这只是一个例子,在现实中,可能是有100个房间的建筑,每个房间都有很多家具,所有这些都需要不同的名称,但共享结构中定义的相同基本数据。我在考虑某种类型的for循环,它可以获取用户拥有多少卧室的用户值,并在json中动态创建那么多卧室,如:

{卧室1:(所有相关物品)},{卧室2:(自己的物品)}。。。。等

我见过几个使用地图的示例,但它们最终打印出来:

地图[[Bedroom1:[所有物品]],卧室2:[其物品]]

这也不符合我的需要

先谢谢你

为了在我给出的示例中进行澄清,您需要能够在json中创建无限多个房间,而无需在my house结构中使用[]卧室


这与一些人发布的json封送示例不同,该示例以user:Frank为例

在此之前询问并回答:


在此之前被问到并回答:可能重复的我认为这可能是Steve wilhelms的答案的重复,也没有回答这个问题,好像你提到了我提供的例子,我已经这样做了。为了使这个答案具有相关性,必须有一个包含用户类型值的结构,并且我必须能够拥有多个用户,而不只是将该类型声明为[]用户,或者在users stuct中包含每个可能的用户。请明确询问您为什么不想使用数组、切片、,或者map?基本上是因为我的程序是制作一个json,然后将它输入一个我无法控制的外部api,如果api很简单,并且想要手工编写json,那么它工作得很好,但是对于更大的应用程序,它很快就会变得复杂。这就是为什么我试图构建一个程序来为我生成json。这只是我提供的示例的一个小规模版本,并没有回答这个问题。现在,如果在另一个结构中有一个值指向foo类型,并且允许我多次调用它,而无需在类似于bar的结构中显式调用它:{foo:{num:int,title:string},另一个foo:{num:int,title:string}
// Annotate the struct with json tags
type Foo struct {
    Number int    `json:"number"`
    Title  string `json:"title"`
}
// ...
foo := &Foo{Number: 123, Title: "Bar"}
f, err := json.Marshal(foo)