有时间开发中经常会遇到一些在JSONArray和JSONObject对象之间转换的操作。两个类的API也为我们提供了相应的方法。
先看如何将JSONObject对象转化为JSONArray:
<pre name="code" class="java">public static void main(String[] args) { /** * 将JSONObject对象转化为JSONArray */ JSONObject jo = new JSONObject(); jo.put("张三", 23); jo.put("李四", 24); jo.put("王五", 26); JSONArray ja = JSONArray.fromObject(jo); System.out.println("JSONArray--->fromObject(JSONObject): "+ja); }
将JSONObject转化为JSONArray对象一般总能成功,但是,当需要把JSONArray转化JSONObject对象时,如果数据结构不对就容易抛出异常:
<span style="white-space:pre"> </span>/** * 将JSONArray对象转化为JSONObject */ JSONObject jo1 = new JSONObject(); jo1.put("张三", 23); jo1.put("李四", 24); jo1.put("王五", 26); JSONArray ja1 = JSONArray.fromObject(jo1); System.out.println(ja1); //如果此时再将JSONArray转为JSONObject则会报错 JSONObject temp = JSONObject.fromObject(ja1);错误异常:
<span style="white-space:pre"> </span>JSONArray ja2 = new JSONArray(); ja2.add("张三"); ja2.add("李四"); ja2.add("王五"); for(int i = 0; i < ja2.size(); i++) { JSONObject jsonObject = ja2.getJSONObject(i); }错误异常:
抛出这些异常都是由JSONArray和JSONObject的数据结构所决定的,不过有时JSONArray中会包含有JSONObject对象格式的数据,这时我们怎么解析呢?其实,查看JSONArray和JSONObject的API可以发现,两者分别提供了getJSONArray(int index)、getJSONObject(int index)和getJSONArray(String key)、getJSONObject(String key)方法,来获取其中对应的数据。
比如我们遍历第一个例子中的JSONArray:
<span style="white-space:pre"> </span>/** * 将JSONObject对象转化为JSONArray */ JSONObject jo = new JSONObject(); jo.put("张三", 23); jo.put("李四", 24); jo.put("王五", 26); JSONArray ja = JSONArray.fromObject(jo); for(int i = 0; i < ja.size(); i++){ System.out.println(ja.get(i)); }
通过JSONArray的getJSONObject(int index)方法可以将其中JSON对象格式的数据取出。