依賴的jar包:

如何使用json-lib來序列化java對象呢?
執行個體:
@test
public void test_serialize(){
class2 c=new class2();
list<student>students=new arraylist<student>();
student student=new student();
map<string, object> attribute =new hashmap<string, object>();
attribute.put("p1", "v1");
attribute.put("p2", "v2");
student.setattribute(attribute);
students.add(student);
c.setstudents(students);
c.setclassname("計算機0705");
jsonobject js = jsonobject.fromobject(c/*, jsonconfig*/);
system.out.println(js.tostring());
}
運作結果如下:
{"classattribute":null,"classname":"計算機0705","count":0,"students":[{"addrr":null,"age":0,"attribute":{"p2":"v2","p1":"v1"},"hobby":"","name":""}]}
public void test_serialize2(){
map<string, object> classattribute =new hashmap<string, object>();
classattribute.put("pp1", "vv1");
classattribute.put("pp2", "vv2");
teacher t=new teacher();
t.setname("熊應标");
t.settitle("國文老師");
c.setclassattribute(classattribute);
// one2one one=new one2one();
// one.setc(c);
// one.sett(t);
{"classattribute":{"pp1":"vv1","pp2":"vv2"},"classname":"計算機0705","count":0,"students":[{"addrr":null,"age":0,"attribute":{"p2":"v2","p1":"v1"},"hobby":"","name":""}]}
如何使用json-lib反序列化(把string轉化為java對象)?
參考:http://hw1287789687.iteye.com/admin/blogs/1993048
public void test_reserialize(){
// string jsoninput="{\"classname\":\"計算機0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"hobby\":\"\",\"name\":\"\"}]}";
string jsoninput="{\"classattribute\":{\"pp1\":\"vv1\",\"pp2\":\"vv2\"},\"classname\":\"計算機0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"attribute\":{\"p2\":\"v2\",\"p1\":\"v1\"},\"hobby\":\"\",\"name\":\"\"}]}";
jsonobject js = jsonobject.fromobject(jsoninput);
jsonconfig jsonconfig = new jsonconfig();
jsonconfig.setrootclass(class2.class);
map<string, class> classmap = new hashmap<string, class>();
classmap.put("students", student.class); // 指定jsonrpcrequest的request字段的内部類型
jsonconfig.setclassmap(classmap);
class2 one = (class2) jsonobject.tobean(js, jsonconfig/*java.lang.classcastexception: net.sf.ezmorph.bean.morphdynabean cannot be cast to*/);
system.out.println(one.getclassname());
map<string, object> attribute =one.getstudents().get(0).getattribute();
system.out.println(attribute);
運作結果:
計算機0705
{p2=v2, p1=v1}
序列化時如何删除屬性值為null的屬性
參考:
<a href="http://stackoverflow.com/questions/8025852/how-to-exclude-properties-from-bean-to-json-at-runtime">http://stackoverflow.com/questions/8025852/how-to-exclude-properties-from-bean-to-json-at-runtime</a>
<a href="http://sourceforge.net/p/json-lib/discussion/587134/thread/a82914d9/">http://sourceforge.net/p/json-lib/discussion/587134/thread/a82914d9/</a>
下面的事不合要求的:
{"addrr":{"country":"中國","state":"湖北省","street":"清河"},"age":25,"hobby":"","name":"黃威"}
hobby的值為空,應該被過濾掉的。
解決方法:
jsonconfig jsonconfig = new jsonconfig();
jsonconfig.setjsonpropertyfilter(new propertyfilter() {
publicboolean apply(object source, string name, object value) {
// system.out.println(name);
// system.out.println(value);
if (value == null || (value instanceof string)
&& ((string) value).equals("")) {
returntrue;
}
returnfalse;
}
});
jsonobject js = jsonobject.fromobject(student, jsonconfig);
參考:http://hw1287789687.iteye.com/blog/1997956