在使用json-lib包中JSONObject.fromObject(bean,cfg)时,可能出现以下几种情况:

1、(防止自包含)转换的对象包含自身对象,或者对象A下面挂了对象B,对象B下面又挂了对象A,如果不设置取消环形结构,则那么会抛异常:"There is a cycle in the hierarchy!"

解决方法:

  在调用JSONObject.fromObject(bean,cfg)时,自定义JsonConfig:

JsonConfig cfg = new JsonConfig();
cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

然后将cfg对象传入fromObject方法中,这样,对象B下面挂的对象A就会被置为NULL。

2、(Date类型转化)JavaBean出现Date格式时,转化成json时会出现将其转化为:{"date":6,"day":3,"hours":21,"minutes":26,"month":0,"nanos":290000000,"seconds":31,"time":1452086791290,"timezoneOffset":-480,"year":116},这个不易处理,如果需要将Date转换为我们认识的“yyyy-MM-dd”格式,则需要自行创建时间转换器,并实现json-lib中的JsonValueProcessor接口,实现该接口中的两个方法(processArrayValue和processObjectValue):

     public class JsonDateValueProcessor implements JsonValueProcessor {
private String format ="yyyy-MM-dd"; public JsonDateValueProcessor() {
super();
} public JsonDateValueProcessor(String format) {
super();
this.format = format;
} @Override
public Object processArrayValue(Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
} @Override
public Object processObjectValue(String paramString, Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
} private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
return sdf.format(value);
}
return value == null ? "" : value.toString();
} }

JsonDateValueProcessor

  cfg.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());

  这样,对象下面如果有Date类型,转化出来变为“yyyy-MM-dd”格式。

3、(字段过滤)如果需要在转化过程中去除某些字段,则需要定义一些Excludes字段,具体使用如下:

  String[] EXCLUDES = new String[]{"A","B","C"};

  cfg.setExcludes(EXCLUDES);

  这样,对象转化时,"A","B","C"会被去除,对象中这些字段转成json时会被删除。

4、(过滤器PropertyFilter使用)和3有点类似,但是PropertyFilter作用是为了过滤某些符合一些指定条件的属性,如:

cfg.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return value == null;//value为null时返回true,返回true的就是需要过滤调的
}
});

这样,对象转化出来后,生成的 json 字符串只包含非空的值。

5、其余的常见用法:

  • cfg.setIgnoreDefaultExcludes(true);  //默认为false,即过滤默认的key,改为true则不忽略
  • cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true)); // 忽略掉集合对象
  • cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true, new String[]{"name"})); // 忽略掉name属性及集合对象

json-lib——JsonConfig详细使用说明的更多相关文章

  1. 使用JsonConfig控制JSON lib序列化

    将对象转换成字符串,是非常常用的功能,尤其在WEB应用中,使用 JSON lib 能够便捷地完成这项工作.JSON lib能够将Java对象转成json格式的字符串,也可以将Java对象转换成xml格 ...

  2. python的urllib2库详细使用说明

    一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...

  3. linux backtrace()详细使用说明,分析Segmentation fault

    linux backtrace()详细使用说明,分析Segmentation fault 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些 ...

  4. Json lib集成stucts2的使用方法 抛出 NestableRuntimeException异常的解决办法

    首先贴出struts 2.3.16需要导入的包 因为使用的是2.3 版本,必须要导入这个包,否则会报java.lang.NoClassDefFoundError: org/apache/commons ...

  5. R语言-Knitr包的详细使用说明

    R语言-Knitr包的详细使用说明 by 扬眉剑 来自数盟[总舵] 群:321311420 1.相关资料 1:自动化报告-谢益辉 https://github.com/yihui/r-ninja/bl ...

  6. STM32-USB详细使用说明(转)

    源:STM32-USB详细使用说明 附件HID的双向通信 亮点STM32开发板充实了USBHID数据发送和接收例程(STM32固件库3.5 USB库3.4)

  7. Atitit.json类库的设计与实现 ati json lib

    Atitit.json类库的设计与实现 ati json lib 1. 目前jsonlib库可能有问题,可能版本冲突,抛出ex1 2. 解决之道:1 2.1. 自定义json解析库,使用多个复合的js ...

  8. IDea 工具debug模式详细使用说明

    IDea 工具debug模式详细使用说明 IDEA中如何使用debug调试项目 一步一步详细教程 Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生 ...

  9. JSON lib 里JsonConfig详解

    一,setCycleDetectionStrategy 防止自包含 /** * 这里测试如果含有自包含的时候需要CycleDetectionStrategy */ public static void ...

随机推荐

  1. 5G为何采纳华为力挺的Polar码?一个通信工程师的大实话

    Polar码被采纳为5G eMBB场景的控制信道编码,这两天连续被这条消息刷屏,连吃瓜群众都直呼好爽. 然而,随着媒体报道的持续发酵,真相在口口相传中变了形,不乏夸大不实之嫌,小编终于坐不住了,也想吐 ...

  2. 【Beta】Scrum05

    Info 由于12.9~12.11三天,PM和测试到上海参加比赛,期间PM对博客更新暂停,功能测试暂停,Scrum会议暂停,12.12日起补充及恢复之前未能完成的工作. 时间:2016.12.08 2 ...

  3. Raspberry Pi 3 --- GPIO control

    Before input 'gpio readall', need install wiringPi download "wiringPi":git clone git://git ...

  4. easyUi 框架中的JS文件传递参数的区别

    1.情景一 //JS文件 ajax的请求url : parent.baseUrl+"user/customer/findOne/" + id, //后台JAVA代码接收参数 @Re ...

  5. NPOI 导出Excel

    NPOIExcel npoiexcel = new NPOIExcel(); string filename = DateTime.Now.ToString("yyyyMMddHHmmssf ...

  6. glusterFS系统中文管理手册(转载)

    GlusterFS系统中文管理手册       1文档说明 该文档主要内容出自 www.gluster.org 官方提供的英文系统管理手册<Gluster File System 3.3.0 A ...

  7. sql 查询

    select * from (select * ,row_number() over(partition by CreateUID order by asid)num from AuctionSell ...

  8. PHP通过ini_set()来设置显示错误信息和执行时间

    PHP的 ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效.不是所有的选项都能被改函数设置的.具体那些值能够设置,可以查看手册中的列表. 就是能够设置php.ini ...

  9. MySQL replace into 使用详解 及 注意事项

    REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除.注意:除非表 ...

  10. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...