请问怎样将有java.sql.Date属性的Bean转换成json字符串,再把json字符串转换回Bean请大侠指教!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问怎样将有java.sql.Date属性的Bean转换成json字符串,再把json字符串转换回Bean请大侠指教!!!相关的知识,希望对你有一定的参考价值。

向题目描述的,我想把一个java对象转换成json字符串,但这个java对象有java.sql.Date类型的属性,json好像不支持java.sql.Date的转换,好像需要自己实现json的接口,我已经实现从java->json字符串的转化,但是在从json字符串转换回Bean的时候,总是找不到方法,请大侠指教!
代码:
User user = new User();
user.setName("sun");
user.setAge(24);
user.setSum(55D);
Date a = new Date(System.currentTimeMillis()); //sqlDate
user.setBirthday(a);

请问怎么将这个对象转换成json字符串,再转换回User对象!!

你需要用到第三方的lib文件: json-lib。
http://json-lib.sourceforge.net/usage.html

From Beans to JSON:

class MyBean
private String name = "json";
private int pojoId = 1;
private char[] options = new char[]'a','f';
private String func1 = "function(i) return this.options[i]; ";
private JSONFunction func2 = new JSONFunction(new String[]"i","return this.options[i];");

// getters & setters
...


JSONObject jsonObject = JSONObject.fromObject( new MyBean() );
System.out.println( jsonObject );
/* prints
"name":"json","pojoId":1,"options":["a","f"],
"func1":function(i) return this.options[i];,
"func2":function(i) return this.options[i];
*/

在你这里就是:JSONObject jsonObject = JSONObject.fromObject(user );

From JSON to Beans:
String json = "bool:true,integer:1,string:\"json\"";
JSONObject jsonObject = JSONObject.fromObject( json );
BeanA bean = (BeanA) JSONObject.toBean( jsonObject, BeanA.class );

在你这里就是:
JSONObject jsonObject = JSONObject.fromObject( json );
User bean = (User) JSONObject.toBean( jsonObject, User.class );
参考技术A 如果是我,我就会把birthday的类型设置为String类型,并且限定为“yyyy-MM-dd”的形式,然后写个工具方法将字符串与日期进行互解析。
JSON擅长的本来就是字符串,不如投其所好,与其实现他的接口,不如自己实现工具方法,简单快捷。
void setBirthday(String birth)
this.birthday = functionName(birth);

String getBirthday()
return birthday;


String functionName(Date date)
return "yyyy-MM-dd";

Date funcitonName(String yMd)
return date;
参考技术B json有一个工具叫做Json-lib,提供相应的转换操作。可以从google一下这个工具,挺好用的。

高效开发:java.util.Date和java.sql.Date两者区别

1、 Java.util.Date是在除了SQL语句的情况下面使用的。java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分。它们都有getTime方法返回毫秒数,自然就可以直接构建。

2、 java.util.Date 是 java.sql.Date 的父类
前者是常用的表示时间的类,通常格式化或者得到当前时间。
后者在读写数据库的时候用到,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date。

3、java.util.Date的几个构造方法和方法
Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date) : 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
getTime() :返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
java.sql.Date的几个构造方法和方法
Date(long date) :使用给定毫秒时间值构造一个 Date 对象。

相同点和不同点

共同点:都有getTime方法返回毫秒数,可以直接构建
不同点:

1、java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用,PreparedStament的setDate()的参数和ResultSet的getDate()方法的都是java.sql.Date

2、java.util.Date是在除了SQL语句的情况下面使用,一般是日常日期字段

3、java.util.Date 是 java.sql.Date 的父类,即:继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date

相互转化

java.sql.Date转为java.util.Date(主要通过getTime())

java.sql.Date date=new java.sql.Date(123456);
java.util.Date d=new java.util.Date (date.getTime());
java.sql.Date date=new java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());

java.util.Date转为java.sql.Date(主要通过getTime())

java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
java.sql.Time sTime=new java.sql.Time(utilDate.getTime());
java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());

这里所有时间日期都可以被SimpleDateFormat格式化format()

SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
f.format(stp);
f.format(sTime);
f.format(sqlDate);
f.format(utilDate)
java.sql.Date sqlDate=java.sql.Date.valueOf(" 2005-12-12");
utilDate=new java.util.Date(sqlDate.getTime());

取得年月日的方法:

import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到YYYYMMDD的格式SimpleDateFormat
sy1=new SimpleDateFormat("yyyyMMDD");
String dateFormat=sy1.format(date);
//如果希望分开得到年,月,日SimpleDateFormat
sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=newSimpleDateFormat("MM");
SimpleDateFormat sd=newSimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);

以上是关于请问怎样将有java.sql.Date属性的Bean转换成json字符串,再把json字符串转换回Bean请大侠指教!!!的主要内容,如果未能解决你的问题,请参考以下文章

在使用jdbc 里面出现了日期数据转换错误,java.util.date 类型的数据怎样转换成java.sql.date 类型。

timestamp传到前端后怎样显示

jdbc-java.sql.date和java.util.date之间转换

sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp

java用sql语句查询某一时间段内的记录

Value '0000-00-00' can not be represented as java.sql.Date解决办法