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 サイトの他の関連記事を参照してください。