黑马程序员技术交流社区
标题:
【上海校区】对象转 json对象
[打印本页]
作者:
不二晨
时间:
2019-3-11 14:11
标题:
【上海校区】对象转 json对象
问题1:
需求:对象转 json对象 时,如果属性值为null的话,无论它的类型是String,Integer,Boolean,Date....,转json对象后,它的属性值都要为null,而不是默认的 “” 或者0。如此需求,关键是数据库查询时若为不等于,则排除不等于还排除了null(实际上是从""及许多非null值中找满足不等于这个条件).但elasticsearch查询果不等于就是不等于。而且把数据库存es时,所有的null属性值都被转为 "" 了。
疑惑:在网上没有找到现成的工具或者方法。有的可以实现如此需求,但不支持数组。
解决方法:在同事的指导下,直接修改 net.sf.json.JSONObject 的源码,问题解决。
详细说明:
1.找到 json-lib-2.4-jdk15.jar 的源码包,解压,把源码拷到本项目下,然后启动项目,并打断点。
2.跟踪转json对象时它所调用的方法,并分析它对不同类型的null值如何处理。
3.修改。并调试。
4.把能满足需求并修改了的java文件编译后的class文件拷贝到原jar包相应的目录下。
5.再一次测试,同时删除先前拷的源码。
总结及感想:
1.以后遇到类似的问题时,就可以如此处理。有些工具其实只要修改一点点就完全可以满足要求,也不 需要想得特别神圣,不必望而却步。
2.源码还是经常要看的。关注别人的编码风格及比较好的思路。
问题2:
转json对象的,Date要转为指定的格式,而不是转为默认的一个日期数组或者其它格式。简单就是:配置config,实现JsonValueProcessor,实现实现两个函数processObjectValue和processArrayValue。
具体见以下源码:
使用时如此写:
private <T> String getJsonString(T obj) {
JsonConfig config = new JsonConfig();
JsonDateValueProcessor jsonValueProcessor = new JsonDateValueProcessor();
config.registerJsonValueProcessor(Date.class, jsonValueProcessor);
JSONObject json = JSONObject.fromObject(obj, config);
return json.toString();
}
JsonDateValueProcessor 类
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class JsonDateValueProcessor implements JsonValueProcessor {
private String pattern = "yyyy/MM/dd";
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}
public Object processObjectValue(String key, Object value, JsonConfig config) {
return process(value);
}
private Object process(Object value) {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.UK);
return sdf.format(value);
} else if (value == null) {
return null;
} else {
return value.toString();
}
}
}
---------------------
【转载,仅作分享,侵删】
作者:xinyuebaihe
原文:
https://blog.csdn.net/xinyuebaihe/article/details/77657776
版权声明:本文为博主原创文章,转载请附上博文链接!
作者:
不二晨
时间:
2019-3-11 15:19
奈斯,感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2