天天看點

json-lib 序列化和反序列化

依賴的jar包:

json-lib 序列化和反序列化

 如何使用json-lib來序列化java對象呢?

執行個體:

json-lib 序列化和反序列化

@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":""}]}

json-lib 序列化和反序列化

    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

json-lib 序列化和反序列化

    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)

                     &amp;&amp; ((string) value).equals("")) {

                  returntrue;

              }

              returnfalse;

           }

       });

       jsonobject js = jsonobject.fromobject(student, jsonconfig);

 參考:http://hw1287789687.iteye.com/blog/1997956