JSON-lib学习(二)json-lib做json转换的原理

在java对象和json之间做转换的时候,json-lib组件,使用的是对象的getter/setter方法,即调用这些方法,不管这些getter/setter方法有没有对应的属性。因此,在做java对象与json之间的转换时候,除了属性的getter/setter方法,其他方法最好不要以get/set开头。

package cycle;

public class ComplexData
{
    private String first;

    public ComplexData()
    {

    }

    public String getOne()
    {
        first = "123";
        return first;
    }

    public void setOne(String str)
    {
        this.first = str;
    }

    public void setTestYes(String str)
    {
        System.out.println("json to java时候,会被调用");
    }

    public void setTestNot()
    {
        System.out.println("不符合set方法约束,没有参数,不会被调用");
    }

    public void getNotCall()
    {
        System.out.println("不会被调用,该方法虽然以get开头,但是没有返回值,不符合javabean约定");
    }

    public String getCanCall()
    {
        System.out.println("虽然不是获取属性方法,但是符合javabean约定,会被调用");
        return null;
    }

}
//测试代码
ComplexData comp = new ComplexData();
System.out.println(JSONObject.fromObject(comp));

String str = "{one:0,testYes:1,testNot:2}";
ComplexData after = (ComplexData) JSONObject.toBean(JSONObject.fromObject(str),     ComplexData.class);
System.out.println(after.getOne());
  
 

程序执行结果:

虽然不是获取属性方法,但是符合javabean约定,会被调用
2013-7-4 21:36:46 net.sf.json.JSONObject defaultBeanProcessing
信息: Property 'testYes' of class cycle.ComplexData has no read method. SKIPPED
{"canCall":"","one":"123"}
json to java时候,会被调用
123
2013-7-4 21:36:46 net.sf.json.JSONObject toBean
警告: Tried to assign property testNot:java.lang.Integer to bean of class cycle.ComplexData

 

你可能感兴趣的:(json-lib)