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

如何从JSON解析非标准时间格式

戴嘉珍
2023-03-14
问题内容

可以说我有以下json

{
    name: "John",
    birth_date: "1996-10-07"
}

我想将其解码为以下结构

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

像这样

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

这给了我错误 parsing time ""1996-10-07"" as ""2006-01-02T15:04:05Z07:00"": cannot parse """ as "T"

如果我要手动解析它,我会这样做

t, err := time.Parse("2006-01-02", "1996-10-07")

但是,当时间值来自json字符串时 ,我如何使解码器以上述格式解析它?


问题答案:

在这种情况下,您需要实现自定义编组和非编组功能

UnmarshalJSON(b []byte) error { ... }

MarshalJSON() ([]byte, error) { ... }

通过遵循json包的Golang文档中的示例,您将获得以下内容:

// first create a type alias
type JsonBirthDate time.Time

// Add that to your struct
type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

// imeplement Marshaler und Unmarshalere interface
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), "\"")
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(j)
}

// Maybe a Format function for printing your date
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}


 类似资料:
  • 问题内容: 任何人都知道以下代码是什么类型的JSON(即使是这样!)?我正在从网站的HTML检索此信息。我正在尝试使用JSON解析器在C#中对其进行解析,但是我必须做大量的准备工作,才能根据JSONLint将其格式化为“有效” JSON。例如,变量的名称应全部用双引号而不是根本没有引号。 这将始终具有相同的格式,我很想直接将其解析为C#或Java对象。 问题答案: JSON要求所有名称都必须用双引

  • 问题内容: 如何在Go中解析非标准的日期/时间字符串。例如,如果我想将字符串转换为?该功能应该允许您指定格式。 http://play.golang.org/p/v5DbowXt1x 这导致了恐慌。 从逻辑上讲这是有道理的,因为它应该如何知道哪一天和哪一个月。 其他语言具有类似于以下功能: 我在Go文档中找不到这样的功能,我唯一选择正则表达式吗? 问题答案: time.Parse正在寻找一些关键值

  • 本文向大家介绍php解析非标准json、非规范json的方式实例,包括了php解析非标准json、非规范json的方式实例的使用技巧和注意事项,需要的朋友参考一下 前言 采集数据的时候经常碰到一些JSON数据的Key值不是字符串,下面就来看看用php如何解析非标准、非规范json 话不多说,直接上代码: 附php解析JSON数据示例代码: data.json PHP 到此这篇关于php解析非标准j

  • TLV格式数据解析。 什么是TLV数据?传送门:http://blog.csdn.net/chexlong/article/details/6974201 在标准的TLV数据解析过程中会遇到很多问题。在目前的开源的C/C 的项目中代码十分的庞大,整合起来十分不方便并没有OC的代码,故作者封装了这个类库供需要使用TLV格式数据的同学们学习使用。 [Code4App.com]

  • 问题内容: 我正在使用Scala 2.8中的JSON类中的构建来解析JSON代码。由于最小化依赖性,我不想使用Liftweb或其他任何一种。 我这样做的方法似乎势在必行,是否有更好的方法可以做到? 问题答案: 这是一个基于提取器的解决方案,它将进行类转换: 在for循环的开始,我人为地将结果包装在一个列表中,以便在最后生成一个列表。然后在for循环的其余部分中,我将使用生成器(使用)和值定义(使用

  • 问题内容: 我正在使用golang,并且尝试从mysql读取时间,并且遇到以下错误。 我得到的错误是 我怎样才能解决这个问题? 问题答案: 假设您正在使用,则可以通过添加到连接字符串中来要求驱动程序将DATE和DATETIME自动扫描到。 参见https://github.com/go-sql-driver/mysql#timetime- support 示例代码: 请注意,这适用于,但不适用于。