您的位置:首页 > Web前端 > JavaScript

简单json,FastJson,Gson解析

2014-12-16 09:59 387 查看
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
+ "]";
}

}


简单起见,Dao层省略,直接在业务逻辑Service层取得测试数据:

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);
}
}
}


Console :

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反射还是非常方便好用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: