Loading... 项目A中需要将对象Case转换成json字符串,然后发送字符串消息,项目B需要将收到的json消息,转换成Case对象,再进行操作。遇到了该Case对象中有多个Date类型的字段,我又不想麻烦的将所有Date转成String类型,再生成JSON,最后鼓捣了一下午,在网上找到了解决方法。 使用net.sf.json.JSONObject进行转换(2019-04-12发现net.sf.json.JSONObject没有com.alibaba.fastjson好用,参考net.sf.json和com.alibaba.fastjson对比),pom.xml文件中引入依赖的jar包: ``` <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> ``` 将含有Date类型的对象转成json字符串,代码如下 1.java对象(含Date类型字段)转JSON 需要使用JSONConfig对象,对传入的数据,进行处理: ``` JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor()); JSONObject jsonObject = JSONObject.fromObject(case1,jsonConfig); JsonDateValueProcessor实现了JsonValueProcessor接口: ``` ``` import java.text.SimpleDateFormat; import java.util.Date; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; public class JsonDateValueProcessor implements JsonValueProcessor{ private String datePattern = "yyyy-MM-dd HH:mm:ss";//默认样式,可以在构造方法中修改 public JsonDateValueProcessor() { super(); } public JsonDateValueProcessor(String datePattern) { super(); this.datePattern = datePattern; } public Object processArrayValue(Object value, JsonConfig jsonConfig) { try { if(value instanceof Date){ SimpleDateFormat sdf = new SimpleDateFormat(datePattern); Date date = (Date)value; return sdf.format(date); } return value == null ? null : value.toString(); } catch (Exception e) { return null; } } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return processArrayValue(value, jsonConfig); } public String getDatePattern() { return datePattern; } public void setDatePattern(String datePattern) { this.datePattern = datePattern; } } ``` 将main方法按照上述修改: ``` public static void main(String[] args) { Case case1 = new Case(); case1.setCaseName("案件"); case1.setCreateDate(new Date()); case1.setAppDate(new Date()); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor()); net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(case1,jsonConfig); String json = jsonObject.toString(); System.out.println(json); } ``` 最后修改:2024 年 08 月 19 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏