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字符串的方法。
/**
* 将对象转换成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性能相比弱一些,但是很稳定。