将 JSON 中的蛇形命名法转换为驼峰命名法
在 Go 中,将 JSON 文档中的键从 Snake_Case 转换为 CamelCase 可能具有挑战性,特别是当 JSON 嵌套并且可能包含任意大或 interface{} 类型时。
方法 1:使用带有标签的不同结构
对于简单的转换情况,您可以利用 Go 的能力来定义具有不同标签的不同结构。使用snake_case标签将JSON解组到源结构中,然后使用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中文网其他相关文章!