首先,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方法的,加个前缀,以示区别;
还有一个array和真实的array差不多

 private ArrayList<String> source=new ArrayList<String>();
                    JSONArray tmpsource = jsonObject.getJSONArray("source");
                    source.clear();
                    for (int i = 0; i < tmpsource.length(); i++) {
                        source.add(tmpsource.get(i).toString());
                    }

 

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐