[json] Go에서 JSON Marshal을 사용한 소문자 JSON 키 이름

"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{}그것을 만들고 인코딩 할 수 있습니다.


답변