2014-12-28 4 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

관련 문제