• 关于go里使用自定义json解析。有的能解析,有的不能解析的问题。


    最简单的就是时间函数

    package model
    
    import (
    	"time"
    )
    
    type JsonTime time.Time
    
    //MarshalJSON jsonTime序列化调用的方法
    func (jsonTime *JsonTime) MarshalJSON() ([]byte, error) {
    	//当返回时间为空时,需特殊处理
    	if time.Time(*jsonTime).IsZero() {
    		return []byte(`""`), nil
    	}
    	return []byte(`"` + time.Time(*jsonTime).Format("2006-01-02 15:04:05") + `"`), nil
    }
    
    //反序列化
    func (jsonTime *JsonTime) UnmarshalJSON(b []byte) error {
    	if string(b) == `""` {
    		*jsonTime = JsonTime(time.Now())
    		return nil
    	}
    	now, err := time.ParseInLocation(`"2006-01-02 15:04:05"`, string(b), time.Local)
    	*jsonTime = JsonTime(now)
    	return err
    }
    

      在这里,在一个DB结构体里定义 JsonTime类型的时候函数

    在使用 json解码的时候直接传值。会导致时间函数解析不出来。主要原因是,解析到jsontime是一个struct时。再次调用stuct的解析函数。这个时候它又使用struct里的各个子项再处理。其实这时已经不用再循环处理。而应该调用MarshalJson来序列化。这时的处理是传值传一个引用类型。在解析的时候它就走ptr的路线,而不走struct的路线。就能解析出json.

  • 相关阅读:
    2017级面向对象程序设计 作业三
    2017级面向对象程序设计 作业二
    2017级面向对象程序设计 作业一
    寒假作业之总结
    寒假第三次作业
    寒假第二次作业 与电梯有关的代码问题
    我印象中最深刻的三位老师
    Alpha冲刺Day5
    Alpha冲刺Day4
    Alpha冲刺Day3
  • 原文地址:https://www.cnblogs.com/bfyang5130/p/16128252.html
Copyright © 2020-2023  润新知