1. GSON技术的介绍
Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
Gson支持任意复杂Java对象包括没有源代码的对象。
2. 服务器端:将Person对象 通过Gson解析成Json字符串.
JsonTools.java
其余的都不用改。
3. 客户端:通过Gson类将 字符串还原成Person对象.
如果不使用这种方法,先把包含JSON数据的数组循环迭代,迭代数组里面的每一个属性,然后在for循环当中构建出这个Person的对象,再把JSON里面的值取出来后,调用Person的set()方法来赋值。
采用这种方法的话,这个API提供了把对象中T属性的值,通过反射机制来映射出来之后,再从jsonString取出来的值赋值进去。
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {}.getType());
把jsonString字符串解析出来之后,封装到list集合当中,分别从T里面取出所有的getType,给它赋值。
2. MainActivity.java中的调用方式
1. 服务器端
不用改。
2. 客户端
1. FastJsonTools.java
Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
Gson支持任意复杂Java对象包括没有源代码的对象。
2. 服务器端:将Person对象 通过Gson解析成Json字符串.
JsonTools.java
public class JsonTools {
public JsonTools() {
}
/**
* @param object 是对解析的集合的类型
* @return
*/
public static String createJsonString(Object value) {
Gson gson = new Gson();
String str = gson.toJson(value);
return str;
}
}
调用的时候把原来的key参数去掉:jsonString = JsonTools.createJsonString(service.getPerson());
其余的都不用改。
3. 客户端:通过Gson类将 字符串还原成Person对象.
1. GsonTools.java
public class GsonTools {
public GsonTools() {
}
public static <T> T getPerson(String jsonString, Class<T> cls) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(jsonString, cls);
} catch (Exception e) {
}
return t;
}
/**
* 使用Gson进行解析 List<Person>
*/
public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
List<T> list = new ArrayList<T>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
}.getType());
} catch (Exception e) {
}
return list;
}
/**
* @param jsonString
* @return
*/
public static List<String> getList(String jsonString) {
List<String> list = new ArrayList<String>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
public static List<Map<String, Object>> listKeyMaps(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString,
new TypeToken<List<Map<String, Object>>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
}
TypeToken
如果不使用这种方法,先把包含JSON数据的数组循环迭代,迭代数组里面的每一个属性,然后在for循环当中构建出这个Person的对象,再把JSON里面的值取出来后,调用Person的set()方法来赋值。
采用这种方法的话,这个API提供了把对象中T属性的值,通过反射机制来映射出来之后,再从jsonString取出来的值赋值进去。
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {}.getType());
把jsonString字符串解析出来之后,封装到list集合当中,分别从T里面取出所有的getType,给它赋值。
2. MainActivity.java中的调用方式
public void onClick(View v) {
switch (v.getId()) {
case R.id.person:
String path = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=person";
String jsonString = HttpUtils.getJsonContent(path);
Person person = GsonTools.getPerson(jsonString, Person.class);
Log.i(TAG, person.toString());
break;
case R.id.persons:
String path2 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=persons";
String jsonString2 = HttpUtils.getJsonContent(path2);
List<Person> list = GsonTools.getPersons(jsonString2, Person.class);
Log.i(TAG, list.toString());
break;
case R.id.liststring:
String path3 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=liststring";
String jsonString3 = HttpUtils.getJsonContent(path3);
List<String> list2 = GsonTools.getList(jsonString3);
Log.i(TAG, list2.toString());
break;
case R.id.listmap:
String path4 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=listmap";
String jsonString4 = HttpUtils.getJsonContent(path4);
List<Map<String,Object>> list3 = GsonTools.listKeyMaps(jsonString4);
Log.i(TAG, list3.toString());
break;
}
}
4. FastJSON
1. 服务器端
不用改。
2. 客户端
1. FastJsonTools.java
public class FastJsonTools {
public FastJsonTools() {
}
public static <T> T getPerson(String jsonString, Class<T> cls) {
T t = null;
try {
t = JSON.parseObject(jsonString, cls);
} catch (Exception e) {
}
return t;
}
/**
* 使用Gson进行解析 List<Person>
*/
public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
List<T> list = new ArrayList<T>();
try {
list = JSON.parseArray(jsonString, cls);
} catch (Exception e) {
}
return list;
}
public static List<Map<String, Object>> listKeyMaps(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
list = JSON.parseObject(jsonString,
new TypeReference<List<Map<String, Object>>>() {
});
} catch (Exception e) {
}
return list;
}
}
2. MainActivity.java中调用
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.person:
String path = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=person";
String jsonString = HttpUtils.getJsonContent(path);
Person person = FastJsonTools.getPerson(jsonString, Person.class);
Log.i(TAG, person.toString());
break;
case R.id.persons:
String path2 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=persons";
String jsonString2 = HttpUtils.getJsonContent(path2);
List<Person> list = FastJsonTools.getPersons(jsonString2, Person.class);
Log.i(TAG, list.toString());
break;
case R.id.liststring:
String path3 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=liststring";
String jsonString3 = HttpUtils.getJsonContent(path3);
List<String> list2 = FastJsonTools.getPersons(jsonString3,String.class);
Log.i(TAG, list2.toString());
break;
case R.id.listmap:
String path4 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=listmap";
String jsonString4 = HttpUtils.getJsonContent(path4);
List<Map<String,Object>> list3 = FastJsonTools.listKeyMaps(jsonString4);
Log.i(TAG, list3.toString());
break;
}
}