"encoding/json"
패키지 를 사용하여 내 응용 프로그램의 가져온 패키지 중 하나에 선언 된 구조체를 마샬링하고 싶습니다.
예 :
type T struct {
Foo int
}
가져 오기 때문에 구조체에서 사용 가능한 모든 (내 보낸) 필드는 대문자로 시작합니다. 그러나 소문자 키 이름을 원합니다.
out, err := json.Marshal(&T{Foo: 42})
결과
{ “푸”: 42}
그러나 나는 얻고 싶다
{ “foo”: 42}
쉬운 방법으로 문제를 해결할 수 있습니까?
답변
encoding / json.Marshal 에 대한 문서를 살펴보십시오 . 생성 된 JSON이 형식화되는 방법을 판별하기 위해 구조체 필드 태그 사용에 대해 설명합니다.
예를 들면 다음과 같습니다.
type T struct {
FieldA int `json:"field_a"`
FieldB string `json:"field_b,omitempty"`
}
다음과 같이 JSON이 생성됩니다.
{
"field_a": 1234,
"field_b": "foobar"
}
답변
내보내려는 키로 자신의 구조체를 만들고 소문자 이름에 적합한 json 태그를 제공 할 수 있습니다. 그런 다음 JSON으로 인코딩하기 전에 원하는 구조체를 구조체에 복사 할 수 있습니다. 또는 로컬 구조체를 만드는 데 신경 쓰지 않으려면 아마도 map[string]interface{}
그것을 만들고 인코딩 할 수 있습니다.