加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Golang中格式输出JSON中的时间戳记?

发布时间:2020-12-16 19:20:16 所属栏目:大数据 来源:网络整理
导读:最近我一直在玩,很棒。我无法想像(通过文档和博客文章查看后)是如何获取time.Time类型格式化为任何格式,我想要的,当它由json.NewEncoder.Encode编码 这是一个最小的代码示例: package maintype Document struct { Name string Content string Stamp time
最近我一直在玩,很棒。我无法想像(通过文档和博客文章查看后)是如何获取time.Time类型格式化为任何格式,我想要的,当它由json.NewEncoder.Encode编码

这是一个最小的代码示例:

package main

type Document struct {
    Name        string
    Content     string
    Stamp       time.Time
    Author      string
}

func sendResponse(data interface{},w http.ResponseWriter,r * http.Request){
     _,err := json.Marshal(data)
    j := json.NewEncoder(w)
    if err == nil {
        encodedErr := j.Encode(data)
        if encodedErr != nil{
            //code snipped
        }
    }else{
       //code snipped
    }
}

func main() {
    http.HandleFunc("/document",control.HandleDocuments)
    http.ListenAndServe("localhost:4000",nil)
}

func HandleDocuments(w http.ResponseWriter,r *http.Request) {
    w.Header().Set("Content-Type","application/json")
    w.Header().Set("Access-Control-Allow-Origin","*")

    switch r.Method {
        case "GET": 
            //logic snipped
            testDoc := model.Document{"Meeting Notes","These are some notes",time.Now(),"Bacon"}    
            sendResponse(testDoc,w,r)
            }
        case "POST":
        case "PUT":
        case "DELETE":
        default:
            //snipped
    }
}

理想情况下,我想发送一个请求,并将Stamp字段恢复为2014年5月15日,而不是2014-05-16T08:28:06.801064-04:00

但是我不太确定如何,我知道我可以添加json:邮票到文档类型声明,以使用名称邮票而不是Stamp来编码字段,但是我不知道这些类型的东西被称为,所以我甚至不知道谷歌是如何找出是否有某种类型的格式化选项,以及。

有没有人链接到一个例子或良好的文档页面上关于这些类型标记(或任何他们称之为)的主题,或者如何告诉JSON编码器来处理time.Time字段?

只是为了参考,我看过这些页面:here和here,当然是at the official docs

你可以做的是将time.Time作为自己的自定义类型,并实现Marshaler接口:
type Marshaler interface {
    MarshalJSON() ([]byte,error)
}

那么你会做的就是这样:

type JSONTime time.Time

func (t JSONTime)MarshalJSON() ([]byte,error) {
    //do your serializing here
    stamp := fmt.Sprintf(""%s"",time.Time(t).Format("Mon Jan _2"))
    return []byte(stamp),nil
}

并制作文件:

type Document struct {
    Name        string
    Content     string
    Stamp       JSONTime
    Author      string
}

并让你的初始化看起来像:

testDoc := model.Document{"Meeting Notes",JSONTime(time.Now()),"Bacon"}

就是这样。如果你想要解组,那么还有Unmarshaler界面。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读