Android解析JSON数据几种方式对比
2016-08-15 16:50
585 查看
Json介绍
Json(JavaScript Object Natotion)是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性,主要用于传送数据。Json是一种取代Xml的数据结构,相比于xml更小巧,从而减少数据传输流量和占用的带宽。
Json语法
{ } 表示对象
[ ] 表示数组
" " 表示值或属性
: 表示前面是key后面是value,value可以是字符串、数字或者另一个数组或对象
举个例子 {"name":"tom"},表示属性名为name,值是tom。[ {"name":"tom"}, {"name":"jack"}] 这个表示2个对象的数组,等价于{"name":["tom","jack"]}这是一个拥有name数组的对象。
传统方式(使用org.json包)
下面给出生成json字符串和解析json字符串的方法。
org.json包提供了5个类,分别为JSONArray,JSONObject,JSONStringer,JSONTokener和JSONException。
JSONException
异常类
JSONStringer
有序构造
JSONObject
无序构造
JSONArray 数组对象
JSONStringer传入的键值对是有序的,JSONObject传入的键值对是无序的,一般情况下使用JSONObject即可,但对于一些嵌套的Json以及一些JSONArray没有key只有value的情况,则使用JSONStringer。
使用类库Gson
<span style="font-size:18px;font-weight: bold;"> </span><span style="font-size:14px;"> /**
* 使用Gson框架将对象转换成String
* @param user
* @return
*/
public static String getJson(User user) {
Gson gson = new Gson();
return gson.toJson(user);
}
/**
* 使用Gson将String转换成对象
* @param json
* @return
*/
public static User getUser(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json,User.class);
}catch (Exception e) {
Log.e("TAG",e.getMessage());
}
return null;
}
/**
* 使用Gson将String转换成对象集合
* @param json
* @return
*/
public static List<User> getUsers(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json, new TypeToken<List<User>>(){}.getType());
}catch (Exception e) {
e.printStackTrace();
}
return null;
}</span>
类似Gson的json库常用的有Gson外还有Jackson和FastJson,对于这三个性能的对比网上众说纷纭,当然这跟他们实现的代码有很大的关系,不过个人测试后发现Jackson和FastJson的序列化和反序列化性能相当。Gson性能相比弱一些,但是很稳定。
Json(JavaScript Object Natotion)是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性,主要用于传送数据。Json是一种取代Xml的数据结构,相比于xml更小巧,从而减少数据传输流量和占用的带宽。
Json语法
{ } 表示对象
[ ] 表示数组
" " 表示值或属性
: 表示前面是key后面是value,value可以是字符串、数字或者另一个数组或对象
举个例子 {"name":"tom"},表示属性名为name,值是tom。[ {"name":"tom"}, {"name":"jack"}] 这个表示2个对象的数组,等价于{"name":["tom","jack"]}这是一个拥有name数组的对象。
传统方式(使用org.json包)
下面给出生成json字符串和解析json字符串的方法。
/** * 将对象转换成json数据 * @param user * @return */ public static String buildJson(User user) { try { JSONObject juser = new JSONObject(); juser.put("name", user.getName()); juser.put("pwd",user.getPwd()); return juser.toString(); }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 将json数据转换成对象 * @param json * @return */ public static User getUser(String json) { JSONTokener jsonTokener = new JSONTokener(json); try { JSONObject user = (JSONObject) jsonTokener.nextValue(); if (user != null) { String name = user.getString("name"); String pwd = user.getString("pwd"); return new User(name,pwd); } }catch (JSONException e){ Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 将json数据转换成User集合 * @param key * @param json * @return */ public static List<User> getUsers(String key,String json) { List<User> list = new ArrayList<User>(); try { JSONObject jsonObject = new JSONObject(json); if (jsonObject != null) { JSONArray array = jsonObject.getJSONArray(key); if (array != null && array.length() > 0 ) { for (int i = 0; i < array.length(); i ++) { JSONObject userJson = array.getJSONObject(i); User user = new User(); user.setName(userJson.getString("name")); user.setPwd(userJson.getString("pwd")); list.add(user); } } return list; } }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; }
org.json包提供了5个类,分别为JSONArray,JSONObject,JSONStringer,JSONTokener和JSONException。
JSONException
异常类
JSONStringer
有序构造
JSONObject
无序构造
JSONArray 数组对象
JSONStringer传入的键值对是有序的,JSONObject传入的键值对是无序的,一般情况下使用JSONObject即可,但对于一些嵌套的Json以及一些JSONArray没有key只有value的情况,则使用JSONStringer。
使用类库Gson
<span style="font-size:18px;font-weight: bold;"> </span><span style="font-size:14px;"> /**
* 使用Gson框架将对象转换成String
* @param user
* @return
*/
public static String getJson(User user) {
Gson gson = new Gson();
return gson.toJson(user);
}
/**
* 使用Gson将String转换成对象
* @param json
* @return
*/
public static User getUser(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json,User.class);
}catch (Exception e) {
Log.e("TAG",e.getMessage());
}
return null;
}
/**
* 使用Gson将String转换成对象集合
* @param json
* @return
*/
public static List<User> getUsers(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json, new TypeToken<List<User>>(){}.getType());
}catch (Exception e) {
e.printStackTrace();
}
return null;
}</span>
类似Gson的json库常用的有Gson外还有Jackson和FastJson,对于这三个性能的对比网上众说纷纭,当然这跟他们实现的代码有很大的关系,不过个人测试后发现Jackson和FastJson的序列化和反序列化性能相当。Gson性能相比弱一些,但是很稳定。
相关文章推荐
- Android中数据解析的几种方式
- android 解析服务器数据使用json还是xml方式
- Android中json数据手动解析方式
- JSON.parse解析json数据及取值的几种方式
- android网络编程之json传输数据以及解析方式
- Android解析JSON方式 服务器端生成JSON数据--很好的例子
- Android中解析json数据的三种方式
- Android解析json数据示例代码(三种方式)
- JSON.parse解析json数据及取值的几种方式
- Android解析JSON方式(一)服务器端生成JSON数据
- android 解析服务器数据使用json还是xml方式
- Android基础笔记——JSONObject方式解析JSON数据
- Android通过类对象的方式实现JSON数据的解析
- Android解析JSON方式 服务器端生成JSON数据
- 探究Android系统中解析JSON数据的方式
- Android解析json数据的几种方法
- Android Json数据解析的四种方式
- Android第一行代码 第九章 数据解析方式(xml,json)
- Android JSON数据解析(GSON方式)
- Android基础之json数据的几种解析方法