美文网首页
golang-接收时间类型参数(自定义 json 的类型转换)

golang-接收时间类型参数(自定义 json 的类型转换)

作者: 爱吃豆包 | 来源:发表于2023-04-17 00:10 被阅读0次

先定义类型

实现 MarshalJSONUnmarshalJSON 函数

json.MarshalJSON 是用于转换为 json
json.UnmarshalJSON 用于解析值

如果在调用 json.UnmarshalJSON(jsonStr, &A{}) 进行解析值的时候,那么就会调用该类型实现的 UnmarshalJSON 函数,也就是说实现 MarshalJSONUnmarshalJSON 函数,我们可以自由的实现 json 的类型转换

package types

import (
    "database/sql"
    "encoding/json"
    "strconv"
    "time"
)

// json 转换 时间

type NullTime struct {
    sql.NullTime
}

// MarshalJSON 转换为 json
func (nt *NullTime) MarshalJSON(value interface{}) ([]byte, error) {
    if nt.Valid {
        return json.Marshal(nt.Time)
    } else {
        return json.Marshal(nil)
    }
}

// UnmarshalJSON 获取值
func (nt *NullTime) UnmarshalJSON(data []byte) error {

    var s *time.Time

    timeStr, _ := UnixToTime(string(data))
    s = &timeStr
    //if err := json.Unmarshal([]byte(timeStr)., &s); err != nil {
    //  return err
    //}
    if s != nil {
        nt.Valid = true
        nt.Time = *s
    } else {
        nt.Valid = false
    }
    return nil
}

func UnixToTime(e string) (datatime time.Time, err error) {
    data, err := strconv.ParseInt(e, 10, 64)
    datatime = time.Unix(data/1000, 0)
    return
}

使用定义好的类型

package params

import (
    "go-press/types"
)

type Base struct {
    Page      int            `form:"page" json:"page"`
    Size      int            `form:"size" json:"size"`
    StartDate types.NullTime `form:"start_date" json:"start_date"`
    EndDate   types.NullTime `form:"end_date" json:"end_date"`
}

那么在使用 json 转换的时候就会转换为我们要的值

base := &Base{}
json.UnmarshalJSON(jsonStr, base)

相关文章

  • WebApi Post参数

    利用动态数据类型参数接收json对象,并转化

  • SpringBoot接收date类型参数转换

    在SpringBoot的配置文件里面添加 DateUtils

  • 3.0查看任务

    描述: 输入参数: 参数类型: application/json 例子: 返回参数: 参数类型: applicat...

  • 自动转换函数

    内置类型间转换 自定义类型的类型转换 使用构造函数进行类型转换 例如 自动转换函数(运算符转换) 例子

  • 接收请求参数和自定类型转换器

    一、接收请求参数 接收请求参数,按照参数的类型可以分为两种:1、采用基本类型接收请求参数(包含get/post)接...

  • swift3.0 类型转换

    任意对象 anyObject转换为json对象 任意对象转换为String类型 String类型转Int类型

  • Flask url传参时,参数中包含"/"

    解决办法 接收参数的地方指定类型为path 接收参数类型参考 string: 默认的数据类型,需注意不能带有'/'...

  • javascript强制类型转换

    javascript强制类型转换 一、转换为数值类型 Number(参数) 把任何类型转换为数值类型A.如果是布尔...

  • SpringMVC(六)类型转换

    类型转换 基本类型转换 日期类型转换 通过@DateTimeFormat 注解来指定日期转换参数,可以通过patt...

  • 参数类型转换

    • 通常,客户端浏览器提交的参数值都是字符串。在服务器端,Struts2框架会根据set方法的参数类型自动进行转换...

网友评论

      本文标题:golang-接收时间类型参数(自定义 json 的类型转换)

      本文链接:https://www.haomeiwen.com/subject/yciqjdtx.html