生成JSONObject一般有两种方式,通过javabean或者map类型来生成。如下面的例子:

 

publicclassUser
{
publicStringusername;
publicStringpassword;
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
}

 

import java.util.HashMap;
import net.sf.json.JSONObject;
publicclassTest{
 
publicstaticvoidmain(Stringargs[]){
    
User user=newUser();
user.setUsername("root");
user.setPassword("1234");
JSONObject json1=JSONObject.fromObject(user);
System.out.println(json1.toString());
HashMap<Object,Object>userMap=newHashMap<Object,Object>();
userMap.put("username","root");
userMap.put("password","1234");
JSONObject json2=JSONObject.fromObject(userMap);
System.out.println(json2.toString());
    
}
}

下面从源码层次分析一下JSONObject.fromObject()方法:

 

publicstaticJSONObject fromObject(Objectobject)
{
returnfromObject(object,newJsonConfig());
}

此函数可以接受的参数类型为:JSON formatted strings,Maps,DynaBeans and JavaBeans。
【注意】DynaBeans是commons-beanutils定义的动态bean。DynaBean并不是Java中所定义的Bean,而是一种"假"的Bean。因为它并不是通过getXXX和setXXX方法,对XXX属性进行取值和设值的。
如果object是其他类型的参数呢?比如说数字,逻辑值,非json格式的字符串,那么将生产空的JSONObject对象。

 

if(JSONUtils.isNumber(object)||JSONUtils.isBoolean(object)||JSONUtils.isString(object))
{
returnnewJSONObject();
}

JSONObject的构造函数有两个:

 

publicJSONObject()
{
this.properties=newListOrderedMap();
}
publicJSONObject(booleanisNull)
{
this();
this.nullObject=isNull;
}

不过,说实话,第二个构造函数使用情况很少。