如果您正在使用使用 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 映射的所有键。将fixKey函数替换为您自己的版本,以将snake_case转换为camelCase。
以上是如何使用 Go 将 JSON 中的蛇形命名法键转换为驼峰式命名法?的详细内容。更多信息请关注PHP中文网其他相关文章!