当前位置: 首页 > 面试题库 >

覆盖json.Marshal用于格式化time.Time的布局

别俊誉
2023-03-14
问题内容

在Golang中,是否有一种方法可以使通用encoding/json元帅在编组time.Time字段时使用不同的布局?

基本上我有这个结构:

s := {"starttime":time.Now(), "name":"ali"}

并且我想使用encdoding/jsonMarshal函数编码为json
,但我想使用自定义布局,我想time.Format(layout)正在调用某个地方,我想控制该布局,


问题答案:

受zeebo的回答启发,并在该评论的注释中进行了散列:

http://play.golang.org/p/pUCBUgrjZC

package main

import "fmt"
import "time"
import "encoding/json"

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}

func main() {
    jt := jsonTime{time.Now(), time.Kitchen}
    if jt.Before(time.Now().AddDate(0, 0, 1)) { // 1
        x := map[string]interface{}{
            "foo": jt,
            "bar": "baz",
        }
        data, err := json.Marshal(x)
        if err != nil {
            panic(err)
        }
        fmt.Printf("%s", data)
    }
}

此解决方案将 time.Time
嵌入
jsonTime结构中。嵌入将所有time.Time方法提升为jsonTime结构,从而允许其使用而无需显式类型转换(请参见// 1)。

嵌入time.Time也不利于推广MarshalJSON方法,出于向后兼容的原因,编码/
json封送处理代码对MarshalText方法的优先级高于MarshalText方法(MarshalText是在Go
1.2中添加的,MarshalJSON
在此之前)。结果,使用默认的time.Time格式,而不使用MarshalText提供的自定义格式

为了克服这个问题,我们为jsonTime结构覆盖了MarshalJSON。



 类似资料:
  • 问题内容: 我有以下风格: 它来自主题的CSS样式文件。但是我想用这种风格覆盖它: 但这没有效果,我的组件使用第一种样式。如何覆盖第一个样式1?我尝试过,但它什么也没做。 我应该在css文件的开头定义自定义样式吗? 更新: 我发现我可以使用函数gridOptions.getRowClass设置要使用的样式类。但是我想解决中心问题(对于我在应用程序中使用的所有角度网格)。任何的想法? 问题答案: 你

  • 我看了一下这个老问题中提到的工具,但是那些做javascript的工具似乎没有提到任何关于覆盖率分析的内容。尽管radamsa提到了可选地将其与覆盖分析配对,但我还没有找到任何关于如何实际做到这一点的文档。 一个如何用覆盖指导模糊测试Java脚本(在浏览器中)应用程序?

  • 我们正在考虑利用spring cloud sleuth进行分布式跟踪,并且我们已经开发了一个PoC。这似乎是一个很好的解决方案,开箱即用。 但我有一个后续问题: 我们使用随机UUID和64位ID作为跟踪ID。我们知道自定义头(例如,一个新的跟踪Id)可以与sleuth头一起添加,但是否可以覆盖slueth的默认跟踪Id格式?我们已经查看了文档,也许传播是我们要走的路。有谁做了这一点,可以指出我们在

  • 问题内容: 我查看了Stack Overflow,但没有找到解决方案,我知道如何在样式存在的情况下覆盖样式,只需更改其属性即可。但是现在我有一种奇怪的样式可以覆盖 这是我所拥有的一个例子 首先我有一个: 现在,我需要使用以下一种样式来覆盖该样式: 问题是第一种样式会追加第二种,但是我不希望那样,在第二种样式中我只需要一行,而不是从第一种样式追加? 问题答案: 您可以将另一个类添加到元素中,而不是重

  • 清单文件Android:Windowsoftinputmode=“AdjustPanAdjustReadstresizeStateVisible”我想在键盘显示和标题栏不熄灭时在键盘顶部显示serachview。有什么办法吗?XMl页面

  • 我正在尝试创建一个主屏幕有三个按钮的Android应用程序。我使用的是Eclipse程序,它自动给按钮一个水平线性布局。我想要一个垂直的直线布局。虽然用XML编码和格式化按钮更容易,但我真的希望我的所有代码都是Java的。我已经在几个网站上寻找如何在Java中格式化重力和重量等参数的指导,但我被卡住了。以下是我发现的一些例子: http://docs.oracle.com/javase/tutor