1. 程式人生 > >org.json.JSONArray轉換為int陣列

org.json.JSONArray轉換為int陣列

首先,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方法的,加個字首,以示區別;