生成JSONObject一般有兩種方式,通過javabean或者map類型來生成。如下面的例子:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class User
{
public String username;
public String password;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.HashMap;
import net.sf.json.JSONObject;
public class Test {
public static void main(String args[]) {
User user = new User();
user.setUsername("root");
user.setPassword("1234");
JSONObject json1 = JSONObject.fromObject(user);
System.out.println(json1.toString());
HashMap<Object,Object> userMap= new HashMap<Object,Object>();
userMap.put("username", "root");
userMap.put("password", "1234");
JSONObject json2 = JSONObject.fromObject(userMap);
System.out.println(json2.toString());
}
}
|
下面從源碼層次分析一下JSONObject.fromObject()方法:
|
1
2
3
4
|
public static JSONObject fromObject(Object object)
{
return fromObject(object, new JsonConfig());
}
|
此函數可以接受的參數類型為:JSON formatted strings,Maps,DynaBeans and JavaBeans。
【注意】DynaBeans是commons-beanutils定義的動態bean。DynaBean並不是Java中所定義的Bean,而是一種"假"的Bean。因為它並不是通過getXXX和setXXX方法,對XXX屬性進行取值和設值的。
如果object是其他類型的參數呢?比如說數字,邏輯值,非json格式的字符串,那么將生產空的JSONObject對象。
|
1
2
3
4
|
if (JSONUtils.isNumber(object) || JSONUtils.isBoolean(object) || JSONUtils.isString(object))
{
return new JSONObject();
}
|
JSONObject的構造函數有兩個:
|
1
2
3
4
5
6
7
8
9
|
public JSONObject()
{
this.properties = new ListOrderedMap();
}
public JSONObject(boolean isNull)
{
this();
this.nullObject = isNull;
}
|
不過,說實話,第二個構造函數使用情況很少。
