欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

golang json key為數字

錢良釵2年前8瀏覽0評論

在使用 golang 時,我們經常需要使用 json 格式來進行數據傳輸和轉換。通常情況下,json 的 key 都是字符串形式,但如果 key 是數字類型時該怎么處理呢?

首先,我們需要了解 json.Unmarshal 函數的一些特性。該函數默認會將 key 識別為字符串類型,因此當 key 是數字類型時,就會無法正常解析。但我們可以通過實現 json.Unmarshaler 接口來自定義 key 的解析方式,具體代碼如下:

type MyStruct map[int]string
func (m *MyStruct) UnmarshalJSON(b []byte) error {
var tmp map[string]string
if err := json.Unmarshal(b, &tmp); err != nil {
return err
}
*m = make(MyStruct)
for k, v := range tmp {
key, err := strconv.Atoi(k)
if err != nil {
return err
}
(*m)[key] = v
}
return nil
}

該代碼實現了一個 map[int]string 的類型,可以將 json 中 key 為數字型的數據解析成該類型。具體實現思路是先將 json 數據解析成一個 map[string]string 類型,然后遍歷該 map 將 key 轉換成 int 型后存儲到 MyStruct 中。

如果需要將一個 MyStruct 對象編碼成 json 格式,我們也需要實現 json.Marshaler 接口,并將 key 轉換成字符串形式。具體代碼如下:

func (m MyStruct) MarshalJSON() ([]byte, error) {
result := make(map[string]string)
for k, v := range m {
result[strconv.Itoa(k)] = v
}
return json.Marshal(result)
}

該代碼實現將 MyStruct 類型轉換成 json 數據,具體實現方法是遍歷 MyStruct 將 key 轉換成字符串形式后存儲到 map[string]string 中。

總之,當 json 中出現 key 為數字類型時,我們可以通過實現 json.Unmarshaler 和 json.Marshaler 接口來自定義解析方式和編碼方式。