加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fastjson date format

发布时间:2020-12-16 19:17:04 所属栏目:百科 来源:网络整理
导读:?? Java代码 @JSONField (format= "yyyy-MM-ddHH:mm:ss" ) public Datebirthday; @JSONField (format="yyyy-MM-dd HH:mm:ss")public Date birthday; 另一种是通过SerializeConfig: Java代码 private static SerializeConfigmapping= new SerializeConfig();
??
Java代码
  1. @JSONField(format="yyyy-MM-ddHH:mm:ss")
  2. publicDatebirthday;

另一种是通过SerializeConfig:

Java代码
  1. privatestaticSerializeConfigmapping=newSerializeConfig();
  2. privatestaticStringdateFormat;
  3. static{
  4. dateFormat="yyyy-MM-ddHH:mm:ss";
  5. mapping.put(Date.class,newSimpleDateFormatSerializer(dateFormat));
  6. }

json字符串中使用单引号:

String text = JSON.toJSONString(object,SerializerFeature.UseSingleQuotes);

字段显示不同的key:

Java代码
  1. publicclassUser{
  2. @JSONField(name="ID")
  3. publicintgetId(){...}
  4. }
  5. Useruser=...;
  6. JSON.toJSONString(user);//{"ID":001}

类的反序列化 JavaBean:

Java代码
  1. Stringtext=...;//{"r":255,"g":0,"b":0,"alpha":255}
  2. Colorcolor=JSON.parSEObject(text,Color.class);

数组:

Java代码
  1. Stringtext=...;//[{...},{...}]
  2. List<User>users=JSON.parseArray(text,User.class);

泛型:

Java代码
  1. Stringtext=...;//{"name":{"name":"ljw",age:18}}
  2. Map<String,User>userMap=JSON.parSEObject(text,newTypeReference<Map<String,User>>(){});

自定义序列化代码示例:

Java代码
  1. publicclassJsonUtil{
  2. privatestaticSerializeConfigmapping=newSerializeConfig();
  3. privatestaticStringdateFormat;
  4. static{
  5. dateFormat="yyyy-MM-ddHH:mm:ss";
  6. }
  7. /**
  8. *默认的处理时间
  9. *
  10. *@paramjsonText
  11. *@return
  12. */
  13. publicstaticStringtoJSON(ObjectjsonText){
  14. returnJSON.toJSONString(jsonText,
  15. SerializerFeature.WriteDateUseDateFormat);
  16. }
  17. /**
  18. *自定义时间格式
  19. *
  20. *@paramjsonText
  21. *@return
  22. */
  23. publicstaticStringtoJSON(StringdateFormat,StringjsonText){
  24. mapping.put(Date.class,newSimpleDateFormatSerializer(dateFormat));
  25. returnJSON.toJSONString(jsonText,mapping);
  26. }
  27. }

自定义反序列化示例:

先自定义一个日期解析类:

Java代码
  1. publicclassMyDateFormatDeserializerextendsDateFormatDeserializer{
  2. privateStringmyFormat;
  3. publicMyDateFormatDeserializer(StringmyFormat){
  4. super();
  5. this.myFormat=myFormat;
  6. }
  7. @Override
  8. protected<Date>Datecast(DefaultJSONParserparser,Typeclazz,ObjectfieldName,Objectval){
  9. if(myFormat==null){
  10. returnnull;
  11. }
  12. if(valinstanceofString){
  13. StringstrVal=(String)val;
  14. if(strVal.length()==0){
  15. returnnull;
  16. }
  17. try{
  18. return(Date)newSimpleDateFormat(myFormat).parse((String)val);
  19. }catch(ParseExceptione){
  20. thrownewJSONException("parseerror");
  21. }
  22. }
  23. thrownewJSONException("parseerror");
  24. }
  25. }
Java代码
  1. publicclassUser{
  2. publicStringname;
  3. publicintheight;
  4. @JSONField(name="com-google-com")
  5. publicvoidsetName(Stringname){
  6. this.name=name;
  7. }
  8. @JSONField(format="yyyy-MM/ddHH:mm:ss")
  9. publicDatebirthday;
  10. }

测试下:

Java代码
  1. /**
  2. *@paramargs
  3. *@throwsIOException
  4. */
  5. publicstaticvoidmain(String[]args)throwsIOException,ParseException{
  6. Stringjson="{"name":"22323","age":1234,"+
  7. ""birthday":"2012-12/1212:12:12"}";
  8. Testt=JSON.parSEObject(json,Test.class,mapping,
  9. JSON.DEFAULT_PARSER_FEATURE,newFeature[0]);
  10. System.out.println(t.name);
  11. System.out.println(t.height);
  12. System.out.println(t.birthday);
  13. System.out.println(
  14. newSimpleDateFormat("yyyy-MM/ddHH:mm:ss").parse("2012-12/1212:12:12"));
  15. }

总结:对于JSONField注解,好像只对序列号的格式有影响,反序列化不管这个,不知道为什么,只能自己写个解析类了,不过这样就更灵活了,可以在里面写很多处理逻辑,比如json字符串里面日期格式并不是标准格式的时候,就可以先转成标准格式再去解析了。

另外,fastjson的document官网一直打不开,不知道神马原因,难道被feng了麽:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读