Android自带JSON解析工具,提供对JSONObject(JSON对象)和JSONArray(JSON数组)的解析处理。
1.JSONObject相关API
- JSONObject构造函数:从指定字符串构造一个JSONObject对象。
- getJSONObject:获取指定名称的JSONObject对象。
- getString:获取指定名称的字符串。
- getInt:获取指定名称的整型数。
- getDouble:获取指定名称的双精度数。
- getBoolean:获取指定名称的布尔数。
- getJSONArray:获取指定名称的JSONArray数组对象。
- put:添加一个JSONObject对象。
- toString:把当前的JSONObject对象输出为一个JSON字符串。
2.JSONArray相关API
- length:获取JSONArray数组的长度。
- getJSONObject:获取JSONArray数组在指定位置的JSONObject对象。
- put:往JSONArray数组中添加一个JSONObject对象。
3.JSON的构造和解析示例
JSON构造
// 获取一个手动构造的json串
private String getJsonStr() {
String str = "";
// 创建一个JSON对象
JSONObject obj = new JSONObject();
try {
// 添加一个名叫name的字符串参数
obj.put("name", "address");
// 创建一个JSON数组对象
JSONArray array = new JSONArray();
for (int i = 0; i < 3; i++) {
JSONObject item = new JSONObject();
// 添加一个名叫item的字符串参数
item.put("item", "第" + (i + 1) + "个元素");
// 把item这个JSON对象加入到JSON数组
array.put(item);
}
// 添加一个名叫list的数组参数
obj.put("list", array);
// 添加一个名叫count的整型参数
obj.put("count", array.length());
// 添加一个名叫desc的字符串参数
obj.put("desc", "这是测试串");
// 把JSON对象转换为json字符串
str = obj.toString();
} catch (JSONException e) {
e.printStackTrace();
}
return str;
}
JSON解析
// 解析json串内部的各个参数
private String parserJson(String jsonStr) {
String result = "";
try {
// 根据json串构建一个JSON对象
JSONObject obj = new JSONObject(jsonStr);
// 获得名叫name的字符串参数
String name = obj.getString("name");
// 获得名叫desc的字符串参数
String desc = obj.getString("desc");
// 获得名叫count的整型参数
int count = obj.getInt("count");
result = String.format("%sname=%s\n", result, name);
result = String.format("%sdesc=%s\n", result, desc);
result = String.format("%scount=%d\n", result, count);
// 获得名叫list的数组参数
JSONArray listArray = obj.getJSONArray("list");
for (int i = 0; i < listArray.length(); i++) {
// 获得数组中指定下标的JSON对象
JSONObject list_item = listArray.getJSONObject(i);
// 获得名叫item的字符串参数
String item = list_item.getString("item");
result = String.format("%s\titem=%s\n", result, item);
}
} catch (JSONException e) {
e.printStackTrace();
}
return result;
}