Atitit.atijson 類庫的新特性設計與實現 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh腳本化2 3. V3版本新特性---迴圈引用解決使用fastjson2 4. prob目前jsonlib庫的存在的問題,2 4.1. 可能版本衝突,拋出ex2 4.
Atitit.atijson 類庫的新特性設計與實現 v3 q31
3. V3版本新特性---迴圈引用解決使用fastjson2
4.2. 多個json類庫編譯需求jar ,需要同時具備多個json jar類庫才可編譯成功。。麻煩2
5.1. 自定義json解析庫,使用多個複合的json 解析複合的引擎2
5.2. 迴圈引用暫時使用fastjson解決,最終要限制level解決2
6.2. 沒有get set方法的屬性自動忽略,而不拋出異常3
6.4. Api使用json lib的,以及gson的也一個3
7. 普通的的json解析器 Jackson類庫 Google Gson JSON-lib類庫4
8.1. toJson xxx.fromObject(x).toString(2)4
8.2. 字元串轉成對象 T fromJson(String str, Class<T> type) fromObject(object)4
1. V1版本---集成了多引擎
2. V2版本新特性 --bsh腳本化
使用了bsh腳本化防止編譯錯誤
3. V3版本新特性---迴圈引用解決使用fastjson
Fastjson版本放在第一解析器序列
4. prob目前jsonlib庫的存在的問題,
4.1. 可能版本衝突,拋出ex
4.2. 多個json類庫編譯需求jar ,需要同時具備多個json jar類庫才可編譯成功。。麻煩
4.3. 迴圈引用的解決
作者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍, EMAIL:[email protected]
轉載請註明來源: http://www.cnblogs.com/attilax/
5. solu解決之道:
5.1. 自定義json解析庫,使用多個複合的json 解析複合的引擎
5.2. 迴圈引用暫時使用fastjson解決,最終要限制level解決
通過反射,變成map,限制層數解決
5.3. 腳本化,防止編譯問題的 出現
6. 幾個要點
6.1. 複合結構的轉換
6.2. 沒有get set方法的屬性自動忽略,而不拋出異常
6.3. 時間格式的轉換
6.4. Api使用json lib的,以及gson的也一個
作者:: 老哇的爪子 Attilax 艾龍, EMAIL:[email protected]
轉載請註明來源: http://www.cnblogs.com/attilax/
6.5. 如果要將泛型轉換成json,
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就可以用這種方式解決。
7. 普通的的json解析器 Jackson類庫 Google Gson JSON-lib類庫
8. Api
8.1. toJson xxx.fromObject(x).toString(2)
8.2. 字元串轉成對象 T fromJson(String str, Class<T> type) fromObject(object)
9. Teste code
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);
}
}
10. 參考
Atitit.序列化迴圈引用解決方案json