1. 程式人生 > >net.sf.json.JSONObject 和org.json.JSONObject 的差別

net.sf.json.JSONObject 和org.json.JSONObject 的差別

創建 new 就會 obj tostring vat 解析json nbsp xxx

一、創建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();方法獲取

org.json.JSONObject:  獲取的字段類型必須跟getXXX()的類型一樣

net.sf.json.JSONObject: 沒有嚴格要求獲取字段的類型跟getXXX()的類型一樣

例如:

JSONObject msgObj = json.getJSONObject("msg");

String availableBalance = msgObj.getString("availableBalance");

如果在org.json.JSONObject 就會報錯,可以msgObj.getDouble("availableBalance");也不會丟精度;

而net.sf.json.JSONObject正確,但是精度會丟失,

如果String str = "{\"code\":\"0000\", \"msg\":{\"availableBalance\":\"31503079.02\"}}";就不會丟失精度。

第二種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();

net.sf.json.JSONObject 和org.json.JSONObject 的差別