將JSON 中的蛇形大小寫鍵轉換為Go 中的駝峰式大小寫
問題:
問題:問題:
問題:
<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>
問題:
問題:
<code class="go">package main import ( "bytes" "encoding/json" "fmt" "strings" ) func main() { // Document source as returned by Elasticsearch 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>問題:題: 中那麼,我們要如何將JSON 中的Snake_case 鍵遞歸轉換為CamelCase 鍵呢?這對於在從 Elasticsearch 等資料儲存體接收資料時將 API 回應 JSON 與內部標準保持一致尤其相關,其中關鍵格式可能會有所不同。 答案:要實現此目的轉換時,我們可以利用多種方法。一種有效的方法利用 Go 1.8 的功能,即定義兩個具有不同欄位標籤的結構體。透過精心設計標籤,我們可以毫不費力地在兩個結構之間進行轉換,有效地應用所需的按鍵轉換。 使用標籤的程式碼範例:基於遞歸映射的方法:另一個全面的策略涉及嘗試將JSON 文件解組為映射。如果操作成功,我們就可以有條不紊地修正鍵,並為每個映射值遞歸執行鍵轉換函數。以下範例說明如何將所有按鍵轉換為大寫。在您的實作中,fixKey函數應該被替換為snake_case轉換函數。
以上是如何在 Go JSON 中將蛇形命名法鍵轉換為駝峰式命名法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!