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

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

Susan Sarandon
Susan Sarandon원래의
2024-10-28 13:12:02887검색

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

Go를 사용하여 JSON에서 Snake-Case 키를 CamelCase로 변환

snake_case 키를 사용하는 JSON 데이터로 작업 중이고 이를 camelCase로 변환해야 하는 경우, Go에서는 효율적으로 그렇게 할 수 있습니다. 이 가이드는 이 작업을 재귀적으로 수행하는 방법을 보여줍니다.

다른 구조체 태그를 사용하는 솔루션

Go 1.8에 도입된 기능으로 JSON 필드 태그만 다른 두 구조체를 만들 수 있습니다. 이를 통해 두 구조체 사이를 쉽게 변환할 수 있습니다.

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type ESModel struct {
    AB string `json:"a_b"`
}

type APIModel struct {
    AB string `json:"aB"`
}

func main() {
    b := []byte(`{ "a_b": "c" }`)

    var x ESModel
    json.Unmarshal(b, &x)

    b, _ = json.MarshalIndent(APIModel(x), "", "  ")
    fmt.Println(string(b))
}</code>

일반 사례를 위한 재귀 솔루션

JSON 구조가 더 복잡한 경우 재귀 접근 방식을 사용하여 키를 변환할 수 있습니다.

<code class="go">package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

func main() {
    b := json.RawMessage(`{
            "a_b": "c",
            "d_e": ["d"],
            "e_f": {
                    "g_h": {
                            "i_j": "k",
                            "l_m": {}
                    }
            }
    }`)

    x := convertKeys(b)

    buf := &bytes.Buffer{}
    json.Indent(buf, []byte(x), "", "  ")
    fmt.Println(buf.String())
}

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>

이 솔루션에서 ConvertKeys 함수는 JSON 맵의 모든 키를 재귀적으로 변환합니다. snake_case를 camelCase로 변환하려면 fixKey 함수를 자신의 버전으로 바꾸세요.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.