Android Json解析简单高效之org.json,取值如囊中取物

我们通常在Android上采用Gson来解析Json数据,很方便的就可以把数据转换成List或者map。当碰到日期时间的时候,你可能会遇到坑,需要格式化一下日期时间格式。

本文介绍org.json这种不需要导入任何包的解析方式,不管Json多少层,如探囊取物。

1、解析{“”:”“} 格式的 JSONObject

如何确认是这种格式,我们都不需要看,打开 http://json.cn (Json在线解析及格式化验证网站),把Json数据直接粘贴到左边,如果是正确的Json数据,在右边我们就可以看到,如下图:

Json数据

{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”风清扬1223”}

Android Json解析简单高效之org.json,取值如囊中取物_第1张图片

在右边已经显示了解析后的结果,我们这时候点击 折叠按钮,如下图:

点击之后的图:

可以看到,折叠之后,显示了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旁边的折叠按钮,如下图:

Android Json解析简单高效之org.json,取值如囊中取物_第2张图片

可以看到,还是一个Object,这就好办了,我们再来写代码:

// 新建JSONObject
JSONObject jsonObject = new JSONObject(jsonObjectString);

// 先取得 xx的值,是个JSONObject
JSONObject yyObject = jsonObject.getJSONObject("xx");
// 再 取得yy的值
String yy = yyObject.getString("yy");

很方便吧,不管下面多少层,我们都可以通过这种方式方便的进行解析取值。

2、解析[{“”:”“},{“”:”“}] 格式的JsonArray

我们拿个这种格式的数据来举例,如下:

[{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”风清扬1223”},{“userId”:123,”GroupID”:1,”userNickName”:”yyy”,”userRealName”:”abc”}]

还是直接粘贴到 json.cn,如下图:

Android Json解析简单高效之org.json,取值如囊中取物_第3张图片

这次看起来比较复杂,别急,我们直接点击最外层的那个 折叠按钮:

点击之后:

可以看到,最外层是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网站最外层折叠,点击里面的折叠按钮,如下:

Android Json解析简单高效之org.json,取值如囊中取物_第4张图片

之后我们看到:

是两个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");

3、总结

对于刚接触Json的同学,可能会拿不准格式,我们通过直接粘贴到json.cn 直接查看解析后的格式。

无外乎两种: Object 和 Array,对应到org.json,就是JSONObject 和 JSONArray。最外层都是直接new出来,里面可直接org.json相应的方法去得到。

用这种方式,不管有多少层,就是多写点JSONObject 和 JSONArray而已,都可以轻松取得你想要的值。

最后,附上Demo下载地址: 点击下载

你可能感兴趣的:(android,json,数据)