首頁 > 後端開發 > Golang > 主體

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

王林
發布: 2024-02-09 08:45:18
轉載
1212 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!