2014-12-28 3 views
8

Как я могу объединить вложенную структуру в JSON? Я знаю, как маршалировать структуру без каких-либо вложенных структур. Однако, когда я пытаюсь сделать ответ JSON таким образом:Маршал вложенных структур в JSON

{"genre": {"country": "taylor swift", "rock": "aimee"}} 

У меня проблемы.

Мой код выглядит следующим образом:

Перейти:

type Music struct { 
    Genre struct { 
    Country string 
    Rock string 
    } 
} 

resp := Music{ 
    Genre: { // error on this line. 
    Country: "Taylor Swift", 
    Rock: "Aimee", 
    }, 
} 

js, _ := json.Marshal(resp) 
w.Write(js) 

Однако я получаю ошибку

Missing type in composite literal

Как решить эту проблему?

ответ

13

Вот композитный буквальным для вашего типа:

resp := Music{ 
    Genre: struct { 
     Country string 
     Rock string 
    }{ 
     Country: "Taylor Swift", 
     Rock: "Aimee", 
    }, 
} 

playground example

Вы должны повторить анонимный тип в буквальном. Чтобы избежать повторения, я рекомендую определить тип для жанра. Кроме того, используйте теги полей для указания имен нижнего регистра на выходе.

type Genre struct { 
    Country string `json:"country"` 
    Rock string `json:"rock"` 
} 

type Music struct { 
    Genre Genre `json:"genre"` 
} 

resp := Music{ 
    Genre{ 
     Country: "Taylor Swift", 
     Rock: "Aimee", 
    }, 
} 

playground example

+0

спасибо! первый пример не сработал, хотя – user3918985

1

Почему бы не задать параметр json для значений структуры? https://play.golang.org/p/n6aJdQgfom

+0

В вашем примере GO Playground вы могли бы добавить и некоторые комментарии? – Pred

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