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 중국어 웹사이트의 기타 관련 기사를 참조하세요!