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

RFC 3339格式以外的json解组时间

连志义
2023-03-14
问题内容

在Go中处理不同时间格式的反序列化的合适方法是什么?在仅接受的RFC 3339中,encoding /
json包似乎完全僵化。我可以将其反序列化为字符串,将其转换为RFC 3339,然后再将其取消编组,但我真的不想这样做。有更好的解决方案吗?


问题答案:

您将必须在自定义类型上实现json.Marshaler/
json.Unmarshaler接口,并改用一个示例:

type CustomTime struct {
    time.Time
}

const ctLayout = "2006/01/02|15:04:05"

func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) {
    s := strings.Trim(string(b), "\"")
    if s == "null" {
       ct.Time = time.Time{}
       return
    }
    ct.Time, err = time.Parse(ctLayout, s)
    return
}

func (ct *CustomTime) MarshalJSON() ([]byte, error) {
  if ct.Time.UnixNano() == nilTime {
    return []byte("null"), nil
  }
  return []byte(fmt.Sprintf("\"%s\"", ct.Time.Format(ctLayout))), nil
}

var nilTime = (time.Time{}).UnixNano()
func (ct *CustomTime) IsSet() bool {
    return ct.UnixNano() != nilTime
}

type Args struct {
    Time CustomTime
}

var data = `
    {"Time": "2014/08/01|11:27:18"}
`

func main() {
    a := Args{}
    fmt.Println(json.Unmarshal([]byte(data), &a))
    fmt.Println(a.Time.String())
}

编辑 :添加CustomTime.IsSet()以检查它是否实际设置,以供将来参考。



 类似资料:
  • 问题内容: 我最近一直在玩Go,它很棒。在浏览文档和博客文章之后,我似乎无法弄清楚的事情是如何将类型格式化为我想要的格式, 这是一个最小的代码示例: 理想情况下,我想发送一个请求并以类似的方式获取“戳记”字段,而不是 但是我不确定如何,我知道我可以添加到文档类型声明中以使用名称戳而不是戳来编码字段,但是我不知道这些类型的东西叫什么,所以我我什至不确定要在Google上查找什么,以了解其中是否还有某

  • 问题内容: 我有这种格式的json数组: 现在,我想解析并以表格格式在Javascript或jQuery中显示它。该表有四列,每一列指示此数组中每个元素的每个属性。该表的第一行是这四个键的名称。其他行是这些键的值。 我不知道如何编写JavaScript代码来实现此功能。你能帮我吗? 问题答案: 演示

  • 我的JSON格式如下: 钥匙对我来说完全不知道。我所知道的是 JSON 的格式为: 其中,都是未知的,可能会有所不同。 我想将其解组为GoLang结构,以便将其作为JSON对象返回到前端。我的结构应该是什么样子?这是我尝试过的,但没有奏效。

  • 问题内容: 我试图解析Java中的JSON字符串并找到键值对,以便我可以确定JSON对象的近似结构,因为JSON字符串的对象结构是未知的。 例如,一个执行可能具有这样的JSON字符串: 另一个像这样: 如何遍历各种JSON元素并确定键及其值?我看着的。我知道如何获取下一个“令牌”并确定令牌的类型(即字段名称,值,数组开头等),但是,我不知道如何获取实际令牌的值。 例如: 或其他库(或)中是否有一个

  • 本文向大家介绍对json数据格式的理解?相关面试题,主要包含被问及对json数据格式的理解?时的应答技巧和注意事项,需要的朋友参考一下 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递。 PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ]

  • 问题内容: 可以说我有以下json 我想将其解码为以下结构 像这样 这给了我错误 如果我要手动解析它,我会这样做 但是,当时间值来自json字符串时 ,我如何使解码器以上述格式解析它? 问题答案: 在这种情况下,您需要实现自定义编组和非编组功能。 通过遵循json包的Golang文档中的示例,您将获得以下内容: