org.json.JSONArray轉換為int陣列
阿新 • • 發佈:2019-02-10
首先,org.json.JSONArray轉換為陣列這一需求相信很多人是遇不到的,我也是腦抽了才有這個需求,先講一下為啥我會有這個需求吧;
我在寫java後臺,前後臺數據傳輸用的json格式,前臺傳給後臺的一個引數值的格式是陣列,後臺取到的資料格式就是JSONArray ,然後我需要這個陣列為引數使用mybatis進行資料庫查詢,因為是第一次寫,就直接把查詢條件的引數寫成了陣列,然後又懶得改(其實,也想知道應該怎麼轉換,畢竟好奇心太重),所有我需要把前臺傳給我的JSONArray轉行成java陣列,於是我就有了這個需求;以後資料庫查詢的集合引數儘量使用List,或者是Map(我在找mybatis使用集合作為引數進行資料庫查詢的方法的時候,還非常納悶,為啥都是List,Map,很少有array,現在知道了);
org.json.JSONArray轉換為陣列,有兩種思路,第一種是把JSONArray轉換成字串,然後把字串轉換為陣列,第二種是把JSONArray轉換成List,然後把List轉換為陣列
第一種思路的實現:
JSONObject req = new JSONObject(URLDecoder.decode(str, "UTF-8"));
//org.json.JSONArray不能直接轉化為陣列,嘗試先轉string,再轉array;
String str1 = req.get("analysisItemId").toString();
//正常情況下,JSONArray很少轉化為陣列,
//此處字串比正常陣列多出一對[],要先去除;
String str2 = str1.substring(1);
String idsStr = str2.substring (0,str2.length()-1);
String[] idsStrArray = idsStr.split(",");
int[] ids = new int[idsStrArray.length];
for(int i=0; i < idsStrArray.length; i++)
{
ids[i] = Integer.parseInt(idsStrArray[i]);
}
第二種思路的實現:
這裡沒有使用List的toArray()方法,是因為該方法只能用於Object陣列,不能用於int[];
JSONObject req = new JSONObject(URLDecoder.decode(str, "UTF-8"));
JSONArray idsJSONArray = (JSONArray) req.get("analysisItemId");
//org.json.JSONArray沒有toArray()方法,但是有toList()方法
List idsList = (List) idsJSONArray.toList();
int[] ids = new int[idsList.size()];
for(int i = 0;i<idsList.size();i++){
ids[i] = (Integer) idsList.get(i);
}
org.json.JSONArray提供了toList()方法,但是沒有提供toArray()方法;
這裡的JSONArray前面一直加了org.json,是因為還有一個庫的JSONArray是有toArray方法的,加個字首,以示區別;