JSON小小结 - - - jackson, gson, json-lib
2016-02-16 15:17
591 查看
0x000
今天看项目看到下面一段代码jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); jsonConfig.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
觉得有必要把json相关再温习一遍。
0x001
性能:Jackson > Gson > Json-lib
依赖:
JSON-lib依赖commons系列的包及 ezmorph包共 5个
Jackson除自身的以外只依赖于commons-logging
0x002
虽然性能不太好 ,但是json-lib有一些特性在某些场景非常重要。自定义转换模式
jsonConfig.registerJsonValueProcessor(xx.class, JsonValueProcessor)
属性过滤器
jsonConfig.setJsonPropertyFilter(PropertyFilter)
设置是否允许循环自包含
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
public class CycleObject { private Long id; private String name; private CycleObject me = this; ... public class Person { private Long id; private String name; private Integer age; private Date brithday; private boolean online; ...
private static JsonConfig jsonConfig = new JsonConfig(); //1.自定义转换方式 public void testValueProcess(){ jsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor() { private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return this.process(value); } @Override public Object processArrayValue(Object value, JsonConfig jsonConfig) { return this.process(value); } public Object process(Object value){ if(value == null){ return ""; //处理Date类型数据 }else if(value instanceof Date){ return sdf.format((Date)value); }else{ return value.toString(); } } }); Person p = new Person(1l, "jack", 20, new Date(), false); System.out.println(JSONObject.fromObject(p, jsonConfig)); } //2.过滤字段,属性过滤器 public void testPropertyFilter(){ jsonConfig.setJsonPropertyFilter(new PropertyFilter() { @Override public boolean apply(Object source, String name, Object value) { if(source instanceof Person){ //过滤name属性 if("age".equals(name)){ return true; } } return false; } }); Person p = new Person(1l, "jack", 20, new Date(), false); System.out.println(JSONObject.fromObject(p, jsonConfig)); } //3.自包含属性设置 public void testCycleDetection(){ jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); //不允许循环包含,设置为null或空 // jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.STRICT); //如果有循环则报错 CycleObject obj = new CycleObject(); obj.setId(100l); obj.setName("jack"); System.out.println(JSONObject.fromObject(obj, jsonConfig)); } public static void main(String[] args) { Demo demo = new Demo(); //demo.testValueProcess(); //{"age":20,"brithday":"2016-02-16","id":1,"name":"jack","online":false} //{"brithday":{"date":16,"day":2,"hours":14,"minutes":41,"month":1,"seconds":12,"time":1455604872269,"timezoneOffset":-480,"year":116},"id":1,"name":"jack","online":false} //demo.testCycleDetection(); //{"id":100,"me":null,"name":"jack"} }
相关文章推荐
- Gson.toJson()时内存溢出StackOverflowError
- XML 与 JSON 优劣对比
- VBA将excel数据表生成JSON文件
- newtonsoft.json解析天气数据出错解决方法
- vbs 解析json jsonp的方法
- Extjs4如何处理后台json数据中日期和时间
- C#实现将类的内容写成JSON格式字符串的方法
- JQuery ajax返回JSON时的处理方式 (三种方式)
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享
- ASP JSON类文件的使用方法
- C#实现对Json字符串处理实例
- C#实现Json转Unicode的方法
- php解析json数据实例
- PHP中JSON的应用技巧
- PHP6 先修班 JSON实例代码
- 关于JSON以及JSON在PHP中的应用技巧
- .Net中的json操作类用法分析
- C#操作 JSON方法汇总
- JavaScript中字符串(string)转json的2种方法