Динамическое преобразование между Golang Structs и Json - PullRequest
0 голосов
/ 02 февраля 2019

Мне интересно, существует ли способ динамического расширения числа записей, которые разделяют одни и те же типы данных в структуре, без использования массива.

, например:

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, который был отформатирован примерно так:

{MasterBedroom: (все релевантные вещи)}, {SpareBedroom: (его собственный набор вещей)}}

Кроме того, это всего лишь примерв действительности это могут быть здания с сотнями комнат, в каждом из которых много мебели, требующих разных названий, но использующих одни и те же базовые данные, определенные в структурах.Я думал о каком-то цикле for, который мог бы принять пользовательское значение для количества спален, которое имел пользователь, и динамически создать такое количество спален в json, как:

{Bedroom1: (все соответствующие вещи)}, {Спальня2: (свой собственный набор вещей)} .... и т. Д.

Я видел пару примеров, которые используют карту, но в итоге они распечатывают:

карта [[Спальня1:[все вещи]], Спальня2: [это вещи]]

, что также не работает так, как мне нужно

Заранее спасибо

Чтобы уточнить впример, который я привел вам, должен был бы быть в состоянии создать бесконечное количество комнат внутри json без использования [] спальни в структуре my house

Это не то же самое, что пример json-маршала, который есть у некоторых людейопубликовал пользователь: Франк в качестве примера

1 Ответ

0 голосов
/ 02 февраля 2019

Здесь спрашивали и отвечали: Преобразование структуры Go в JSON

// 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...