gpt4 book ai didi

go - 解码为结构时从 JSON 转换值

转载 作者:IT王子 更新时间:2023-10-29 01:37:42 24 4
gpt4 key购买 nike

我有这个 JSON API,它以 UNIX 时间戳的形式返回交付日期。我更愿意在应用程序的其余部分使用 Time。以下代码有效,但感觉不太像 Go。

type Delivery struct {
Time string `json:"time"`
}

func timestampToTime(s string) time.Time {
i, _ := strconv.ParseInt(s, 10, 64)
returns time.Unix(i, 0)
}

fmt.Println(timestampToTime(Delivery.Time))
// 2019-02-17 11:55:00 +0100 CET

有没有办法在结构中转换传入值?

最佳答案

您可以执行与此处描述的自定义 JSON Unmarshal 方法非常相似的操作:

http://choly.ca/post/go-json-marshalling/

假设 JSON 在您的情况下包含一个字符串,这将如下所示:

package main

import (
"encoding/json"
"fmt"
"os"
"strconv"
"time"
)

const input = `{"time": "946684799"}`

type Delivery struct {
Time time.Time `json:"time"`
}

func (d *Delivery) UnmarshalJSON(data []byte) error {
type Alias Delivery
aux := &struct {
Time string `json:"time"`
*Alias
}{
Alias: (*Alias)(d),
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
i, err := strconv.ParseInt(aux.Time, 10, 64)
if err != nil {
return err
}
d.Time = time.Unix(i, 0)
return nil
}

func main() {
var delivery Delivery
err := json.Unmarshal([]byte(input), &delivery)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println(delivery.Time)
}

https://play.golang.org/p/mdOmUO2EDIR

关于go - 解码为结构时从 JSON 转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54737585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com