快速使用:java解析复杂json:JSONObject 和 JSONArray的使用 - 有梦就能实现 - 博客园
详解:JSON三种数据解析方法(转) - mao的博客 - 博客园
JsonObject 和 JsonArray的使用
我们的目的是解析下面这样的json内容:
{
"feeds": [
{
"id": 299080,
"oid": 288342,
"category": "article",
"data": {
"subject": "视频直播:会面",
"summary": "在新加坡会面",
"cover": "/288342/56a263bcab4a4c55b0bef0528ce880b6_padmini.JPG",
"pic": "",
"format": "video",
"changed": "2015-11-07 14:35:22"
}
},
{
"id": 299076,
"oid": 288340,
"category": "article",
"data": {
"subject": "荔新闻3.0:不止是阅读",
"summary": "手机应用“荔新闻”于近期推出全新升级",
"cover": "/288340/3e8e2c397c70469f8845fad73aa38165_padmini.JPG",
"pic": "",
"format": "txt",
"changed": "2015-09-22 16:01:41"
}
}
],
"PageIndex": 1,
"PageSize": 20,
"TotalCount": 53521,
"TotalPage": 2677
}
我们看上面的符号,里面有[] ,{}等符号,其中
-
[] 中括号代表的是一个数组
-
{} 大括号代表的是一个对象
-
双引号 “” 表示的是属性值
-
冒号 : 代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型
我们先来JSONObject(系统自带的类)类中的方法:
代码如下:
public class JsonUtils {
/**
* 根据json数据解析返回一个List<HashMap<String, Object>>集合
* @param json json数据
* @return
*/
public static List<HashMap<String, Object>> getJsonList(String json) {
List<HashMap<String, Object>> dataList;
dataList = new ArrayList<>();
try {
JSONObject rootObject = new JSONObject(json);
JSONObject paramzObject = rootObject.getJSONObject("paramz");
JSONArray feedsArray = paramzObject.getJSONArray("feeds");
for (int i = 0; i < feedsArray.length(); i++) {
JSONObject sonObject = feedsArray.getJSONObject(i);
JSONObject dataObject = sonObject.getJSONObject("data");
String subjectStr = dataObject.getString("subject");
String summaryStr = dataObject.getString("summary");
String coverStr = dataObject.getString("cover");
HashMap<String, Object> map = new HashMap<>();
map.put("subject", subjectStr);
map.put("summary", summaryStr);
map.put("cover", coverStr);
dataList.add(map);
}
return dataList;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
下面我又写了一个解析的方法,方法中会有一些冗余的代码,是为了更加深刻理解JSON解析而写的,实际中可以删掉,也用了一行GSON解析
public class DataModel {
/**
* subject : 会面
* summary : 在新加坡会面
* cover : /Attachs/Article/288342/56a263bcab4a4c55b0bef0528ce880b6_padmini.JPG
* pic :
* format : video
* changed : 2015-11-07 14:35:22
*/
public String subject;
public String summary;
public String cover;
public String pic;
public String format;
public String changed;
@Override
public String toString() {
return "DataModel{" +
"subject='" + subject + '\'' +
", summary='" + summary + '\'' +
", cover='" + cover + '\'' +
", pic='" + pic + '\'' +
", format='" + format + '\'' +
", changed='" + changed + '\'' +
'}';
}
}
/**
* 根据json对象获取List<DataModel>集合
* @param json 数据
* @return
*/
public static List<DataModel> getGsonList(String json) {
List<DataModel> dataList;
try {
JSONObject rootObject = new JSONObject(json);
JSONObject paramzObject = rootObject.getJSONObject("paramz");
/**
* JSONArray的构造方法获取JSONArray对象
*/
JSONArray jsonArray = new JSONArray(paramzObject.getString("feeds"));
Log.i(TAG, "jsonarray.length():"+jsonArray.length());
/**
* 获取JSONObject对象的属性关键字
*/
Iterator<String> iterators = paramzObject.keys();
while (iterators.hasNext()) {
Log.i(TAG, "iterators: " + iterators.next());
}
JSONArray feeds = paramzObject.getJSONArray("feeds");
dataList = new ArrayList<>();
for (int i = 0; i < feeds.length(); i++) {
JSONObject jsonObject = feeds.getJSONObject(i);
DataModel model = new Gson().fromJson(jsonObject.getString("data"), new TypeToken<DataModel>() {
}.getType());
Log.i(TAG, "DataModel: " + model.toString());
dataList.add(model);
}
return dataList;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
运行结果:
总结
-
对于JSONObject对象来说,想要得到一个JSONObject对象通常可以通过
-
构造方式:JSONObject(String json)-> JSONObject rootObject = new JSONObject(json);
-
JSONObject getJSONObject(String name){} -> JSONObject paramzObject = rootObject.getJSONObject(“paramz”);
-
-
对于JSONArray对象来说,想要得到一个JSONArray对象通常可以通过
-
构造方式:JSONArray(String json) -> JSONArray jsonArray = new JSONArray(paramzObject.getString(“feeds”));
-
JSONObject getJSONObject(String name){} -> JSONArray feeds = paramzObject.getJSONArray(“feeds”);
-