生成JSONObject一般有两种方式,通过javabean或者map类型来生成。如下面的例子:
1 public class User 2 { 3 public String username; 4 public String password; 5 public String getUsername() 6 { 7 return username; 8 } 9 public void setUsername(String username)10 {11 this.username = username;12 }13 public String getPassword()14 {15 return password;16 }17 public void setPassword(String password)18 {19 this.password = password;20 }21 }
1 import java.util.HashMap; 2 import net.sf.json.JSONObject; 3 public class Test { 4 5 public static void main(String args[]) { 6 7 User user = new User(); 8 user.setUsername("root"); 9 user.setPassword("1234");10 JSONObject json1 = JSONObject.fromObject(user);11 System.out.println(json1.toString());12 HashMap
下面从源码层次分析一下JSONObject.fromObject()方法:
1 public static JSONObject fromObject(Object object)2 {3 return fromObject(object, new JsonConfig());4 }
此函数可以接受的参数类型为:JSON formatted strings,Maps,DynaBeans and JavaBeans。
【注意】DynaBeans是commons-beanutils定义的动态bean。DynaBean并不是Java中所定义的Bean,而是一种"假"的Bean。因为它并不是通过getXXX和setXXX方法,对XXX属性进行取值和设值的。如果object是其他类型的参数呢?比如说数字,逻辑值,非json格式的字符串,那么将生产空的JSONObject对象。1 if (JSONUtils.isNumber(object) || JSONUtils.isBoolean(object) || JSONUtils.isString(object))2 {3 return new JSONObject();4 }
JSONObject的构造函数有两个:
1 public JSONObject()2 {3 this.properties = new ListOrderedMap();4 }5 public JSONObject(boolean isNull)6 {7 this();8 this.nullObject = isNull;9 }