标签:
我们通常在Android上采用Gson来解析Json数据,很方便的就可以把数据转换成List或者map。当碰到日期时间的时候,你可能会遇到坑,需要格式化一下日期时间格式。
本文介绍org.json这种不需要导入任何包的解析方式,不管Json多少层,如探囊取物。
如何确认是这种格式,我们都不需要看,打开 http://json.cn (Json在线解析及格式化验证网站),把Json数据直接粘贴到左边,如果是正确的Json数据,在右边我们就可以看到,如下图:
Json数据
{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”风清扬1223”}
在右边已经显示了解析后的结果,我们这时候点击 折叠按钮,如下图:
点击之后的图:
可以看到,折叠之后,显示了Object{…},这就表示起码这一层是 JsonObject格式的数据,这就好办了,我们开始写代码。
private static final String jsonObjectString = "{\"userId\":981,\"groupId\":2,\"userNickName\":\"xxx\",\"userRealName\":\"风清扬1223\"}";
try {
// 新建JSONObject
JSONObject jsonObject = new JSONObject(jsonObjectString);
// 直接可得数据
String userId = jsonObject.getString("userId");
// 打印userId
Log.d(TAG, userId);
} catch (JSONException e) {
e.printStackTrace();
}
很简单,新建JSONObject,就可以直接在里面取数据。那下面还有一层呢,譬如下面这种格式的:
{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”风清扬1223”,”xx”:{“yy”:”“}}
如果我们要取得yy的值,怎么办?不急,我们还是直接粘贴到 json.cn网站:
再次点击xx旁边的折叠按钮,如下图:
可以看到,还是一个Object,这就好办了,我们再来写代码:
// 新建JSONObject
JSONObject jsonObject = new JSONObject(jsonObjectString);
// 先取得 xx的值,是个JSONObject
JSONObject yyObject = jsonObject.getJSONObject("xx");
// 再 取得yy的值
String yy = yyObject.getString("yy");
很方便吧,不管下面多少层,我们都可以通过这种方式方便的进行解析取值。
我们拿个这种格式的数据来举例,如下:
[{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”风清扬1223”},{“userId”:123,”GroupID”:1,”userNickName”:”yyy”,”userRealName”:”abc”}]
还是直接粘贴到 json.cn,如下图:
这次看起来比较复杂,别急,我们直接点击最外层的那个 折叠按钮:
点击之后:
可以看到,最外层是Array,我们开始写代码,先得到这个Array,
private static final String jsonArrayString = "[{\"userId\":981,\"GroupID\":2,\"userNickName\":\"xxx\",\"userRealName\":\"风清扬1223\"},{\"userId\":123,\"GroupID\":1,\"userNickName\":\"yyy\",\"userRealName\":\"abc\"}]";
// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);
好,到这里,我们已经得到了最外层的那个JSONArray数组,我们在 json.cn网站最外层折叠,点击里面的折叠按钮,如下:
之后我们看到:
是两个Object,还能想到JSONObject么,我们继续完善代码:
// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);
// 得到数组下标为0的JSONObject
JSONObject jsonObject0 = jsonArray.getJSONObject(0);
重点是直接通过JSONArray 的 getJSONObject(index) 方法来得到JSONObject。
下面就好办了,全部代码如下:
// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);
// 得到数组下标为0的JSONObject
JSONObject jsonObject0 = jsonArray.getJSONObject(0);
// 直接可取userId
String userId = jsonObject0.getString("userId");
对于刚接触Json的同学,可能会拿不准格式,我们通过直接粘贴到json.cn 直接查看解析后的格式。
无外乎两种: Object 和 Array,对应到org.json,就是JSONObject 和 JSONArray。最外层都是直接new出来,里面可直接org.json相应的方法去得到。
用这种方式,不管有多少层,就是多写点JSONObject 和 JSONArray而已,都可以轻松取得你想要的值。
最后,附上Demo下载地址: 点击下载
Android Json解析简单高效之org.json,取值如囊中取物
标签:
原文地址:http://blog.csdn.net/hwe_xc/article/details/51271815