首頁  >  文章  >  後端開發  >  json.Unmarshal 轉換為自訂的另一種類型(映射到切片)

json.Unmarshal 轉換為自訂的另一種類型(映射到切片)

王林
王林轉載
2024-02-09 08:45:181184瀏覽

json.Unmarshal 转换为自定义的另一种类型(映射到切片)

php小編蘋果在這篇文章中將為大家介紹如何使用json.Unmarshal函數將JSON資料轉換為自訂的另一種類型,即映射到切片。在開發過程中,我們經常會遇到需要將JSON資料轉換為不同的資料類型的情況,而json.Unmarshal函數可以幫助我們實現這一功能。透過本文的介紹和範例程式碼,相信讀者們能夠更好地理解和應用json.Unmarshal函數,提高開發效率和程式碼品質。

問題內容

給定以下 json 字串:

{
 "username":"bob",
 "name":"robert",
 "locations": [
   {
    "city": "paris",
    "country": "france"
   },
   {
    "city": "los angeles",
    "country": "us"
   }
 ]
}

我需要一種方法將其解組到像這樣的結構中:

type User struct {
 Username string
 Name string
 Cities []string
}

其中 cities 是包含「city」值的切片,「country」被丟棄。

我認為這可以使用自訂 json.unmarshal 函數來完成,但不確定如何做到這一點。

解決方法

您可以為 cities 定義新類型並實作自訂 unmarshaler

type User struct {
    Username string   `json:"username"`
    Name     string   `json:"name"`
    Cities   []Cities `json:"locations"`
}

type Cities string

func (c *Cities) UnmarshalJSON(data []byte) error {
    tmp := struct {
        City string `json:"city"`
    }{}
    err := json.Unmarshal(data, &tmp)
    if err != nil {
        return err
    }
    *c = Cities(tmp.City)
    return nil
}

遊樂場

以上是json.Unmarshal 轉換為自訂的另一種類型(映射到切片)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除