json,FastJson,Gson简单比较:
后台数据和手机客户端之间的传输可以用xml格式,或者使用json字符串,这里写一个简单的json的示例Demo。
业务逻辑:一般是客户端发送请求,后台Action或Servlet接受请求以后委托给Service业务层调用Dao层获取到数据以后转换为json字符串发送至前台,前台在接收到json字符串以后解析字符串,获得服务器数据,显示在手机客户端。
Model 层 Person.java
package com.demo.domain; public class Person { private int id; private String name; private String address; public Person() { // TODO Auto-generated constructor stub } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Person(int id, String name, String address) { super(); this.id = id; this.name = name; this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", address=" + address + "]"; } }
JsonService.java
package com.demo.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.demo.domain.Person; /** * @author kk * */ public class JsonService { /** * get one person obj * * @return a person */ public Person getPerson() { Person p = new Person(1001, "jack", "长沙"); return p; } /** * get a String array * @return String[] */ public String[] getStringArr() { return new String[] { "广州", "上海", "深圳" }; } /** * get a list persons * * @return List<Person> */ public List<Person> getPersonsList() { List<Person> list = new ArrayList<Person>(); Person p = new Person(1001, "jack", "长沙"); Person p1 = new Person(1002, "rose", "上海"); list.add(p); list.add(p1); return list; } /** * get a array persons * * @return Person[] */ public Person[] getPersonsArr() { Person p = new Person(1001, "jack", "长沙"); Person p1 = new Person(1002, "rose", "广州"); return new Person[] { p, p1 }; } /** * get a list map persons * * @return List<Map<String,Object>> */ public List<Map<String, Object>> getListMapPerson() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); Person p1 = new Person(1001, "jack", "长沙"); Person p2 = new Person(1002, "rose", "广州"); map.put("p1", p1); map.put("p2", p2); Map<String, Object> map1 = new HashMap<String, Object>(); Person p3 = new Person(1003, "tom", "长沙"); Person p4 = new Person(1004, "somebody", "广州"); map.put("p3", p3); map.put("p4", p4); list.add(map); list.add(map1); return list; } }
项目中导入了json,fastjson,gson的jar包,引用结构如下:
简单起见,这里没有在android客户端发送请求获取服务器端数据来解析,直接在main里面对代码测试:
TestJsonGsonFastJson.java
package com.demo.test; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.TypeReference; import com.demo.domain.Person; import com.demo.service.JsonService; /** * @author kk * */ public class TestJsonGsonFastJson { public static void main(String[] args) { JsonService service = new JsonService(); String jsonStr = null; // convert to json String net.sf.json.JSONObject jsonObj = new net.sf.json.JSONObject(); jsonObj.put("person", service.getPerson()); jsonStr = jsonObj.toString(); System.out.println("json String:" + jsonStr); // parser the json String jsonObj = net.sf.json.JSONObject.fromObject(jsonStr); jsonObj = jsonObj.getJSONObject("person"); Person jsonPerson = new Person(); jsonPerson.setId(jsonObj.getInt("id")); jsonPerson.setName(jsonObj.getString("name")); jsonPerson.setAddress(jsonObj.getString("address")); System.out.println(jsonPerson); System.out.println(); // fastJson convert json String jsonStr = com.alibaba.fastjson.JSON.toJSONString(service.getPerson()); System.out.println("fastJson String:" + jsonStr); // fastJson parser json String Person fastJsonPerson = com.alibaba.fastjson.JSONObject.parseObject( jsonStr, Person.class); System.out.println(fastJsonPerson + "\n"); // convert to Gson String com.google.gson.Gson gson = new com.google.gson.Gson(); jsonStr = gson.toJson(service.getPerson()); System.out.println("gson String:" + jsonStr); // parser the Gson String to Obj Person person = gson.fromJson(jsonStr, Person.class); System.out.println(person); System.out.println(); // convert array data to json jsonObj = new net.sf.json.JSONObject(); jsonObj.put("arrpersons", service.getPersonsArr()); jsonStr = jsonObj.toString(); System.out.println("json arr String:" + jsonStr); // parser array data jsonObj = net.sf.json.JSONObject.fromObject(jsonStr); net.sf.json.JSONArray jsonArr = jsonObj.getJSONArray("arrpersons"); Person[] personArr = new Person[jsonArr.size()]; for (int i = 0; i < jsonArr.size(); i++) { net.sf.json.JSONObject temp = jsonArr.getJSONObject(i); Person tempPerson = new Person(); tempPerson.setId(temp.getInt("id")); tempPerson.setName(temp.getString("name")); tempPerson.setAddress(temp.getString("address")); personArr[i] = tempPerson; } for (Person temp : personArr) { System.out.println(temp); } System.out.println(personArr.toString()); System.out.println(); // convert arr data to fastJson String jsonStr = com.alibaba.fastjson.JSON.toJSONString(service .getPersonsArr()); System.out.println("fastJson arr data String:" + jsonStr); // parser fastJson arr data com.alibaba.fastjson.JSONArray parseFSArray = com.alibaba.fastjson.JSON .parseArray(jsonStr); List<Person> persons = com.alibaba.fastjson.JSON.parseArray(jsonStr, Person.class); System.out.println(persons); System.out.println(); // convert arr data to Gson String gson = new com.google.gson.Gson(); jsonStr = gson.toJson(service.getPersonsArr()); System.out.println("gson arr data String:" + jsonStr); // parser Gson arr data personArr = gson.fromJson(jsonStr, new com.google.gson.reflect.TypeToken<Person[]>() { }.getType()); for (Person temp : personArr) { System.out.println(temp); } System.out.println(personArr); System.out.println(); // convert list data to json String jsonObj = new net.sf.json.JSONObject(); jsonObj.put("persons", service.getPersonsList()); jsonStr = jsonObj.toString(); System.out.println("json list String:" + jsonStr); // parser the json list data jsonObj = net.sf.json.JSONObject.fromObject(jsonStr); jsonArr = jsonObj.getJSONArray("persons"); persons = new ArrayList<Person>(); for (int i = 0; i < jsonArr.size(); i++) { net.sf.json.JSONObject temp = jsonArr.getJSONObject(i); Person p = new Person(); p.setId(temp.getInt("id")); p.setName(temp.getString("name")); p.setAddress(temp.getString("address")); persons.add(p); } System.out.println(persons + "\n"); // convert list data to fastJson String jsonStr = com.alibaba.fastjson.JSON.toJSONString(service .getPersonsList()); System.out.println("fastJson list String:" + jsonStr); // parser the fastJson list data persons = com.alibaba.fastjson.JSON.parseArray(jsonStr, Person.class); System.out.println(persons); persons = com.alibaba.fastjson.JSON.parseObject(jsonStr, new TypeReference<List<Person>>() { }.getType()); System.out.println(persons+"\n"); // convert list data to Gson String jsonStr = gson.toJson(service.getPersonsList()); ; System.out.println("gson list String:" + jsonStr); // parser Gson list data Type type = new com.google.gson.reflect.TypeToken<List<Person>>() { }.getType(); persons = gson.fromJson(jsonStr, type); System.out.println(persons.getClass()); System.out.println(persons); for (Person p : persons) { System.out.println(p); } } }
json String:{"person":{"address":"长沙","id":1001,"name":"jack"}} Person [id=1001, name=jack, address=长沙] fastJson String:{"address":"长沙","id":1001,"name":"jack"} Person [id=1001, name=jack, address=长沙] gson String:{"id":1001,"name":"jack","address":"长沙"} Person [id=1001, name=jack, address=长沙] json arr String:{"arrpersons":[{"address":"长沙","id":1001,"name":"jack"},{"address":"广州","id":1002,"name":"rose"}]} Person [id=1001, name=jack, address=长沙] Person [id=1002, name=rose, address=广州] [Lcom.demo.domain.Person;@677951c9 fastJson arr data String:[{"address":"长沙","id":1001,"name":"jack"},{"address":"广州","id":1002,"name":"rose"}] [Person [id=1001, name=jack, address=长沙], Person [id=1002, name=rose, address=广州]] gson arr data String:[{"id":1001,"name":"jack","address":"长沙"},{"id":1002,"name":"rose","address":"广州"}] Person [id=1001, name=jack, address=长沙] Person [id=1002, name=rose, address=广州] [Lcom.demo.domain.Person;@6bfd472 json list String:{"persons":[{"address":"长沙","id":1001,"name":"jack"},{"address":"上海","id":1002,"name":"rose"}]} [Person [id=1001, name=jack, address=长沙], Person [id=1002, name=rose, address=上海]] fastJson list String:[{"address":"长沙","id":1001,"name":"jack"},{"address":"上海","id":1002,"name":"rose"}] [Person [id=1001, name=jack, address=长沙], Person [id=1002, name=rose, address=上海]] [Person [id=1001, name=jack, address=长沙], Person [id=1002, name=rose, address=上海]] gson list String:[{"id":1001,"name":"jack","address":"长沙"},{"id":1002,"name":"rose","address":"上海"}] class java.util.ArrayList [Person [id=1001, name=jack, address=长沙], Person [id=1002, name=rose, address=上海]] Person [id=1001, name=jack, address=长沙] Person [id=1002, name=rose, address=上海]
可以看出在对集合型数据解析的时候Gson,FastJson反射还是非常方便好用的。