2016-06-06 3 views
0

У меня есть этот json-файл. В этом json-файле есть n число ключей, как мы видим. A1, B1 ......................... ............................................. zn, a1, a2 ................................................. ...................... a, b1 ........................ .................................................. млрд и т.д.Как построить динамическую структуру в голанге?

 { 
     "_id": "5746992a54c1ae24d53ce651", 
     "A1": [ 
      { 
       "a1": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
      { 
       "a2": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
    . 
    . 
    , 
      { 
       "an": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      } 
     ], 
     "B1": [ 
      { 
       "b1": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
      { 
       "b2": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
      { 
       "bn": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      } 
     ], 
    . 
    . 
    . 
    , 
     "Bn": [ 
      { 
       "b1": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
      { 
       "b2": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      }, 
      { 
       "bn": [ 
        "abc", 
        "def", 
        "ghi" 
       ] 
      } 
     ] 
    } 

, как назвать свою структуру в golang

type Level1 struct { 
    TAGID  bson.ObjectId  `json:"_id" bson:"_id"` 
    LEVELTAG2 []Level2   `json:"level2" bson:"level2"`  
} 

type LevelTag2 struct{ 
     LEVEL3 []string   `json:"level3" bson:"level3"` 
} 

Я строю эту структуру в golang является т здесь правильный путь или любой другой способ , пожалуйста, помогите мне

+0

Связанный/возможный дубликат [Взятие строки JSON, снятие его с карты, редактирование и маршалинг в байтовый фрагмент кажется более сложным, чем это должно быть) (http://stackoverflow.com/questions/28877512/ с-а-JSON-строка-демаршалинг-он-в-а-mapstringinterface редактирование-ап) – icza

ответ

3

Когда ключи неизвестны во время компиляции, вы действительно можете использовать только map[string]interface{}, а затем некоторые вспомогательные функции для навигации по этой структуре.

Если ключи буквально являются a1, a2, a3 и т. Д., Вы можете создать фактическую структуру, но это будет не так, как вам нужно прописать каждый ключ.

В целом, когда ключи ваших документов являются частью данных, вы не можете создавать статические структуры.

И "части данных" Я имею в виду:

{ 
    "billy":23, 
    "tommy":24 
} 

против

[ 
    {"name":"billy", "age":23}, 
    {"name":"tommy", "age":24} 
] 

Эта вторая форма может быть представлена ​​в виде: структуры {имя строки, Возраст Int}

, в то время как первым может быть только: map [string] int или map [string] interface {} (если структура глубокая)

0

Лучше всего определить вашу структуру (с вложенными структурами как уровни). А затем реализовать интерфейс UnmarshalJSON([]byte) error для преобразования входящих данных в желаемую структуру.

Я не хочу писать длинные примеры, если не уверен, что вы хотите =) Я хотел бы использовать аналогичный подход, как я использовал в Merge a dynamic data structure in Go.

Вам нужны эти «A1» .. «ZN», («a1» .. «an») ... («z1» .. «zn»)? Или кусочков будет достаточно? Как:

type S struct { 
    ID bson.ObjectId 
    Data [][][]string 
} 

Или может быть преобразовать внутренний []string

[ 
    "abc", 
    "def", 
    "ghi" 
] 

в какой-то структуры, если есть только 3 элемента?

Смежные вопросы