ホームページ >バックエンド開発 >Golang >Go を使用して JSON のスネークケースキーをキャメルケースキーに変換するにはどうすればよいですか?

Go を使用して JSON のスネークケースキーをキャメルケースキーに変換するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 17:07:29663ブラウズ

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

JSON 内のスネークケースキーからキャメルケースキーへの変換

Go では、JSON ドキュメント内のキーをスネークケースからキャメルケースに変換するのは困難な場合があります。特に、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 のスネークケースキーをキャメルケースキーに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。