標籤:
產生JSONObject一般有兩種方式,通過javabean或者map類型來產生。如下面的例子:
| 123456789101112131415161718192021 |
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; }} |
| 12345678910111213141516171819 |
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()方法:
| 1234 |
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對象。
| 1234 |
if (JSONUtils.isNumber(object) || JSONUtils.isBoolean(object) || JSONUtils.isString(object)){ return new JSONObject();} |
JSONObject的建構函式有兩個:
| 123456789 |
public JSONObject(){ this.properties = new ListOrderedMap();}public JSONObject(boolean isNull){ this(); this.nullObject = isNull;} |
不過,說實話,第二個建構函式使用方式很少。
(2)-產生JSONObject的方法