Atitit.atijson 类库的新特性设计与实现 v3 q31
1. V1版本---集成了多引擎1
2. V2版本新特性 --bsh脚本化2
3. V3版本新特性---循环引用解决使用fastjson2
4. prob目前jsonlib库的存在的问题,2
4.1. 可能版本冲突,抛出ex2
4.2. 多个json类库编译需求jar ,需要同时具备多个json jar类库才可编译成功。。麻烦2
4.3. 循环引用的解决2
5. solu解决之道:2
5.1. 自定义json解析库,使用多个复合的json 解析复合的引擎2
5.2. 循环引用暂时使用fastjson解决,最终要限制level解决2
5.3. 脚本化,防止编译问题的 出现3
6. 几个要点3
6.1. 复合结构的转换3
6.2. 没有get set方法的属性自动忽略,而不抛出异常3
6.3. 时间格式的转换3
6.4. Api使用json lib的,以及gson的也一个3
6.5. 如果要将泛型转换成json, 3
7. 普通的的json解析器 Jackson类库 Google Gson JSON-lib类库4
8. Api4
8.1. toJson xxx.fromObject(x).toString(2)4
8.2. 字符串转成对象 T fromJson(String str, Class<T> type) fromObject(object)4
9. Teste code4
10. 参考6
使用了bsh脚本化防止编译错误
Fastjson版本放在第一解析器序列
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:[email protected]
转载请注明来源: http://www.cnblogs.com/attilax/
通过反射,变成map,限制层数解决
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:[email protected]
转载请注明来源: http://www.cnblogs.com/attilax/
1、如,一个Map是这样的,Map<String, Map<String, List<String>>> map,如果这样使用gson.toJson(map)得不到正确的结果的话,那么,我们可能要这样使用,gson.toJson(map,new TypeToken<Map<String, Map<String, List<String>>>>(){}.getType())。
解决方案:
1、如果涉及到关联属性的对象,转换前可以先把它的关联属性转换并放入一个新建的Map或者List,然后按照层次结构重复这样的操作一层一层的往上转,这样,一般可以解决问题,但是,如果关联的层次比较深,做起来就很麻烦了。上面提到的问题3就可以用这种方式解决。
package com.attilax.json;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.attilax.core;
import com.google.gson.Gson;
public class JSONObject {
public JSONObject(Map m) {
this.obj = m;
}
public static void main(String[] args) {
Map m = new HashMap();
m.put("d", new Date());
// m.put(key, value)
JSONObject.fromObject(m).toString(2);
}
private String toString(int i) {
// if(i==2) //fmt
{
try {
return net.sf.json.JSONObject.fromObject(this.obj).toString(i);
} catch (Exception e) {
try {
// 创建一个gson对象
Gson gson = new Gson();
// 转换成json
String json = gson.toJson(this.obj);
return json;
} catch (Exception e2) {
return JsonUtil4jackjson.buildNormalBinder().toJson(
this.obj);
}
}
}
}
public Object obj;
private static JSONObject fromObject(Map m) {
// TODO Auto-generated method stub
return new JSONObject(m);
}
}
Atitit.序列化循环引用解决方案json