> 백엔드 개발 > Golang > Go를 사용하여 JSON에서 Snake-Case를 CamelCase 키로 변환하는 방법은 무엇입니까?

Go를 사용하여 JSON에서 Snake-Case를 CamelCase 키로 변환하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-28 17:07:29
원래의
659명이 탐색했습니다.

How to Convert Snake-Case to CamelCase Keys in JSON Using Go?

JSON에서 Snake-Case를 CamelCase 키로 변환

Go에서는 JSON 문서의 키를 snake_case에서 camelCase로 변환하는 것이 어려울 수 있습니다. 특히 JSON이 중첩되어 있고 임의로 큰 유형 또는 인터페이스{} 유형이 포함될 수 있는 경우.

방법 1: 태그와 함께 다른 구조체 사용

간단한 변환의 경우 다음을 수행할 수 있습니다. 다양한 태그로 다양한 구조체를 정의하는 Go의 기능을 활용하세요. JSON을 snake_case 태그를 사용하여 소스 구조체로 역정렬화한 다음 이를 camelCase 태그를 사용하여 대상 구조체로 간단하게 변환합니다.

<code class="go">import (
    "encoding/json"
)

// Source struct with snake_case tags
type ESModel struct {
    AB string `json:"a_b"`
}

// Target struct with camelCase tags
type APIModel struct {
    AB string `json:"aB"`
}

func ConvertKeys(json []byte) []byte {
    var x ESModel
    json.Unmarshal(b, &x)

    b, _ = json.MarshalIndent(APIModel(x), "", "  ")
    return b
}</code>
로그인 후 복사

방법 2: 맵 키를 재귀적으로 변환

더 복잡한 JSON 문서의 경우 이를 맵으로 역마샬링해 볼 수 있습니다. 성공하면 맵 내의 모든 키와 값에 키 변환 함수를 반복적으로 적용합니다.

<code class="go">import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

func ConvertKeys(j json.RawMessage) json.RawMessage {
    m := make(map[string]json.RawMessage)
    if err := json.Unmarshal([]byte(j), &m); err != nil {
        // Not a JSON object
        return j
    }

    for k, v := range m {
        fixed := fixKey(k)
        delete(m, k)
        m[fixed] = convertKeys(v)
    }

    b, err := json.Marshal(m)
    if err != nil {
        return j
    }

    return json.RawMessage(b)
}

func fixKey(key string) string {
    return strings.ToUpper(key)
}</code>
로그인 후 복사

위 내용은 Go를 사용하여 JSON에서 Snake-Case를 CamelCase 키로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿