json.Unmarshal 将地图转换为切片

问题描述 投票:0回答:1

给定以下 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
是包含“城市”值的切片,“国家”被丢弃。

我认为这可以使用自定义

JSON.Unmarshal
函数来完成,但不知道该怎么做。

json go unmarshalling
1个回答
2
投票

您可以为

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
}

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.