#bug1 fastjson迴圈引用引發乙個bug
fastjson可以將乙個物件序列化為json,也可以通過反序列化出乙個完整的物件。且支援迴圈引用。
/** ::new */
public class data******vo
public data******vo(string name, object value)
@override
public string tostring()
}
data******vo a = new data******vo("a", 1);
data******vo b = new data******vo("b", 2);
b.value = a;
mapmap = new hashmap<>();
map.put(a.name, a);
b.value1 = map;
string jsonstr = json.tojsonstring(b);
system.out.println(jsonstr);
data******vo obj = json.parseobject(jsonstr, data******vo.class);
system.out.println(obj.tostring());
執行結果
,"value1":}}
data******vo [name=b, value=, value1=}]
反序列化成功
改一下**
data******vo a = new data******vo("a", 1);
data******vo b = new data******vo("b", 2);
b.value1 = a;
mapmap = new hashmap<>();
map.put(a.name, a);
b.value = map;
string jsonstr = json.tojsonstring(b);
system.out.println(jsonstr);
data******vo obj = json.parseobject(jsonstr, data******vo.class);
system.out.println(obj.tostring());
執行結果
},"value1":}
data******vo [name=b, value=}, value1=null]
b中的value1為空,反序列化失敗
#bug2 要序列化的類含有class型別屬性引起的迴圈遞迴無法結束最後記憶體溢位
要序列化、反序列化的類
public class request implements serializable
public void setclazz(class<?> clazz)
public string getmethod()
public void setmethod(string method)
public object getparam()
public void setparam(object param)
public object invoke(object bean) throws exception
}
觸發bug
request r = new request();
r.setclazz(integer.class);
string s = json.tojsonstring(r, serializerfeature.writeclassname);
system.out.println(s);
json.parseobject(s);//bug 觸發
我們看看內部
public static jsonobject parseobject(string text)
return (jsonobject) json.tojson(obj);
}
如果改為json.parseobject(s, request.class);或者直接使用json.parse(str)就沒問題。
最後的建議:
不要使用json.parseobject(…)只使用json.parse(str);
資料序列化和反序列化
序列化 encoding 把python物件編碼轉換成json字串。反序列化 decoding 把json格式字串解碼為python物件。python中序列化通常有兩種方式 pickle模組和json模組 pickle模組的使用 對於大多數應用程式來講,dump 和load 函式的使用就是你使用pi...
Django 序列化資料之多表資料序列化
1.將查詢後的多張表的資料做序列化操作 2.為什麼要做三張表的序列化操作,因為三張表的字段有些相同有些不同 3.將三張表序列化後的資料進行合併 4.之後將合併後的序列化操作實現分頁查詢操作 data group1qeryset models.group1.objects.all group2qery...
C 的XML序列化和反序列化4
public class people xmlattribute age public int age xmlroot root public class student people xmlelement number public int number void main string args...