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

前端之家收集整理的这篇文章主要介绍了在Golang中格式输出JSON中的时间戳记?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我一直在玩,很棒。我无法想像(通过文档和博客文章查看后)是如何获取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字段?

只是为了参考,我看过这些页面herehere,当然是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界面。

猜你在找的Go相关文章