封送到JSON时额外的带反斜杠的双引号

封送到JSON时额外的带反斜杠的双引号,json,go,Json,Go,我正在玩Go并尝试将结构编码为json。一切都很好,除了当我运行代码时,我在json主体响应中得到一个字符串,我运行的代码如下: type LocalTimes struct { LocalTimes []DateTime `json:"localTimes"` } type DateTime struct { Timezone string `json:"timezone"` Data string `json:&quo

我正在玩Go并尝试将结构编码为json。一切都很好,除了当我运行代码时,我在json主体响应中得到一个字符串,我运行的代码如下:

type LocalTimes struct {
    LocalTimes []DateTime `json:"localTimes"`
}

type DateTime struct {
    Timezone string `json:"timezone"`
    Data     string `json:"date"`
    Time     string `json:"time"`
}

<some code>

responseData, _ := ioutil.ReadAll(apiR.Body)

                var apiC map[string]interface{}

                json.Unmarshal([]byte(responseData), &apiC)

                date, _ := json.Marshal(apiC["date"])
                time, _ := json.Marshal(apiC["time"])

                dt := DateTime{
                    utcTime,
                    string(date),
                    string(time),
                }

                localTimes.LocalTimes = append(localTimes.LocalTimes, dt)

<some code>

    json.NewEncoder(w).Encode(localTimes)



and the response I get is:


{
    "localTimes": [
        {
            "timezone": "UTC-5",
            "date": "\"2020-11-24\"",
            "time": "\"07:15:41\""
        },
        {
            "timezone": "UTC-4",
            "date": "\"2020-11-24\"",
            "time": "\"08:15:43\""
        },
        {
            "timezone": "UTC-3",
            "date": "\"2020-11-24\"",
            "time": "\"09:15:45\""
        },
        {
            "timezone": "UTC-2",
            "date": "\"2020-11-24\"",
            "time": "\"10:15:47\""
        }
    ]
}
但在Json上,它变成:

"\" 2020-11-24 \ ""

您正在对这些字符串进行双重编码。当您解组输入时,这些字段将被解码为字符串。然后json封送这些字符串(这将为您提供“值”),然后再次编码它们,即“值”

简单地做:

var date,time string
if value, ok:=apiC["date"]; ok {
  date=fmt.Sprint(value)
}
if value, ok:=apiC["time"]; ok {
  time=fmt.Sprint(value)
}

可以使用以下命令将接口转换为字符串:

date := apiC["date"].(string)
time := apiC["time"].(string)

您是否缺少类型断言?或者Go现在是否允许将
接口{}
转换为
字符串
date := apiC["date"].(string)
time := apiC["time"].(string)