codememo

이동 시 JSON Marshal이 포함된 소문자 JSON 키 이름

tipmemo 2023. 2. 8. 17:57
반응형

이동 시 JSON Marshal이 포함된 소문자 JSON 키 이름

사용하고 싶다"encoding/json"응용 프로그램의 Import된 패키지 중 하나에 선언된 구조물을 정리하는 패키지.

예:

type T struct {
    Foo int
}

가져오기 때문에 구조체의 모든 사용 가능한(내보낸) 필드는 대문자로 시작합니다.단, 키명은 소문자로 해 주세요.

out, err := json.Marshal(&T{Foo: 42})

결과적으로

{"Foo": 42}

하지만 나는 그것을 얻기를 원합니다.

{"foo":42}

그 문제를 쉽게 해결할 수 있을까요?

인코딩/json에 대한 문서를 확인하십시오.보안관님구조 필드 태그를 사용하여 생성된 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{}부호화해 주세요.

이러한 태그를 자동으로 생성할 수 있는 방법만 추가합니다.gopls특히 큰 json 구조의 경우 태그를 수동으로 추가하는 것은 간단한 작업이기 때문에 기능은 라이브 세이버입니다.

추가goplslangserver는 선호하는 에디터에 따라 다릅니다.그 후:

go install golang.org/x/tools/gopls@latest

CoC를 사용하는 Neovim의 경우 다음과 같은 작업을 수행할 수 있습니다.:CocInstall coc-go그리고 나서.go.tags.addCoC 확장자 go에 대한 자세한 내용은 여기를 참조하십시오.

생성할 수 있습니다.json:"camelCase"fatih/gomodifytag가 있는 구조 필드의 태그.

예.

$ gomodifytags -file main.go -struct T -add-tags json -transform camelcase -quiet -w

다음 번호:-override기존 태그를 덮어씁니다.

언급URL : https://stackoverflow.com/questions/11693865/lowercase-json-key-names-with-json-marshal-in-go

반응형