首先,我们需要理解什么是json。那么什么是json呢?json其实是一种数据结构,json分为两种结构,一种是我们常见的以key-value形式存在的无序jsonobject对象,另外一种则是有序的集合,也被称为数组(jsonarray)。
解析json其实就是解析json字符串,从字符串中获取到我们需要的数据。解析方法有很多,在这里分享一下我最常用的两种:
第一种,原始的JSONObject进行解析
我们假定一个json字符串是{"name":"gt","age":24,"birth":"1994-11-16"},接下来我们分别取出name、age和birth的值,代码如下:
String jsonStr = "{\"name\":\"gt\",\"age\":24,\"birth\":\"1994-11-16\"}"; String name="",birth=""; int age=0; JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr); name = jsonObject.getString("name"); age = jsonObject.getInt("age"); birth = jsonObject.getString("birth"); } catch (JSONException e) { e.printStackTrace(); }
在实际应用中,我们总是碰到嵌套的json,那该怎解析呢?其实很简单,我们假设json字符串是{"teacher":{"name":"gt","age":24,"birth":"1994-11-16"}},那么它的解析代码如下:
String jsonStr = "{\"teacher\":{\"name\":\"gt\",\"age\":24,\"birth\":\"1994-11-16\"}}"; String name="",birth=""; int age=0; JSONObject jsonObject,jsonTeacher; try { jsonObject = new JSONObject(jsonStr); jsonTeacher = jsonObject.getJSONObject("teacher"); name = jsonObject.getString("name"); age = jsonObject.getInt("age"); birth = jsonObject.getString("birth"); } catch (JSONException e) { e.printStackTrace(); }
在前面我们提到了还一个JSONArray的概念,其实我们完全可以把其看成一个数组,通过getJSONArray获取
第二种,借助第三方库Gson解析
在这里我们采用反序列化的方式来解析json字符串,首先我们需要获取到json字符串,假设json字符串的格式是这个样子的:
{"state":1,"msg":"\u6682\u65e0\u6570\u636e","result":""}
首先定义一个javabean对象,可以复制json字符串快速构造,创建类后alt+Insert,如图示:
然后创建Gson对象,Gson gson = new Gson();
反序列化,Bean bean = gson.fromJson(json, Bean.class);
之后我们便可通过JavaBean中定义的get方法获取对应的值,如果json有嵌套则会用到ResultBean