文章轉載:http://my.oschina.net/wangwu91/blog/340721
如果有版權問題,請聯繫我。
原文標題:net.sf.json.JSONObject 和org.json.JSONObject 的差別
其實,出現fromObject沒有被定義,是因爲json有兩個包,就是net.sf.json和org.json。在使用json的過程中,會有包的導入。
看你選擇導入的包,如果選擇的是org.json.json這個包,就會出現undefined。
下面是轉載過來的文章。關於兩個包之間的區別。
net.sf.json.JSONObject 和org.json.JSONObject 的差別。
一、創建json對象
String str = "{\"code\":\"0000\", \"msg\":{\"availableBalance\":31503079.02}}
org.json.JSONObject:
JSONObject json = new JSONObject(str);
net.sf.json.JSONObject:
JSONObject json = JSONObject.fromObject(str);
net.sf.json.jsonobject 沒有 new JSONObject(String)的構造方法
二、解析json
第一種直接用json對象.getXXX();方法獲取
net.sf.json.JSONObject: 沒有嚴格要求獲取字段的類型跟getXXX()的類型一樣
org.json.JSONObject:獲取的字段類型必須跟getXXX()的類型一樣
e.g.
JSONObject msgObj = json.getJSONObject("msg");
String availableBalance = msgObj.getString("availableBalance");
{\"availableBalance\":\"31503079.02\"}}";
org.json.JSONObject 就會報錯,可以msgObj.getDouble(“availableBalance”);也不會丟精度;
net.sf.json.JSONObject正確,但是精度會丟失,如果
String str = "{\"code\":\"0000\", \"msg\":
就不會丟失精度。
第二中json對象直接轉變實體對象
public class BalanceDto {
private String availableBalance;
public String getAvailableBalance() {
return availableBalance;
}
public void setAvailableBalance(String availableBalance) {
this.availableBalance = availableBalance;
}
public String toString(){
return "availableBalance"+availableBalance;
}
}
org.json.JSONObject:
BalanceDto alanceDto = (BalanceDto) JSONObject.stringToValue(msgObj);
這個句話編譯通過,但是運行會報錯,原因是BalanceDto 類中availableBalance 的類型跟json中的“availableBalance ”類型不同意
net.sf.json.JSONObject:
String msg = json.getString("msg");
BalanceDto alanceDto = (BalanceDto) JSONObject.toBean(
msg, new BalanceDto().getClass());
三、從json中獲取數組
JSONArray subArray = json.getJSONArray(“msg”);
net.sf.json.JSONObject:
int leng = subArray.size();
org.json.JSONObject:
int leng = subArray.length();
json net.sf.json的需要的包:
下載地址:http://download.csdn.net/detail/shaoqianting/8698183