GsonLib下载链接
Gson相比org.json最大的好处是从json字符串转向java实例时候少了依据每个实例自己赋值的过程,比如在org.json的时候,我们先从json字符串构建一个jsonobject,然后用各种的json get方法获取到每个字段的值,这是一个体力活。而gson依据反射机制我们只要传递我们要实例化的类型class进去返回就是创建好的实例。大大减少了代码量。
先从java实例到json这个方向
构建了三个方法,分别测试javabean,list,map转化成json的用例。用法超级简单,实例化一个Gson实例,然后调用成员方法tojson,然后就转化成了json字符串。
这个tojson方法不依靠原来对象的tostring方法。也就是说待json化的对象不实现tostring方法也可以成功json化。
package gson.demo.tojson;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import gson.demo.javabean.Person;
public class ObjectToJson {
/**
* javabean to json
*
* @param person
* @return
*/
public static String javabeanToJson(Person person) {
Gson gson = new Gson();
String json = gson.toJson(person);
return json;
}
/**
* list to json
*
* @param list
* @return
*/
public static String listToJson(List<Person> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
/**
* map to json
*
* @param map
* @return
*/
public static String mapToJson(Map<String, Person> map) {
Gson gson = new Gson();
String json = gson.toJson(map);
return json;
}
}
Json到java实例
这方面是Gson的优势
关于new TypeToken<List<Person>>() {}.getType());
的问题是eclipse没有提示要写对。这个参数的作用是给出实例化的模板
package gson.demo.tojson;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import gson.demo.javabean.Person;
public class JsonToObject {
/**
* json to javabean
*
* @param json
*/
public static void jsonToJavaBean(String json) {
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);//对于javabean直接给出class实例
System.out.println(person.toString());
}
/**
* json字符串转List集合
*/
public static void jsonToList(String json) {
Gson gson = new Gson();
List<Person> persons = gson.fromJson(json, new TypeToken<List<Person>>() {
}.getType());//对于不是类的情况,用这个参数给出
for (Person person : persons) {
System.out.println(person);
}
}
public static void jsonToMap(String json) {
// TODO Auto-generated method stub
Gson gson = new Gson();
Map<String, Person> maps = gson.fromJson(json, new TypeToken<Map<String, Person>>() {
}.getType());
for (Map.Entry<String, Person> entry : maps.entrySet()) {
System.out.println("key: " + entry.getKey() + " " + "value: " + entry.getValue());
}
}
}
最后给出测试数据
package gson.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import gson.demo.javabean.Book;
import gson.demo.javabean.Person;
import gson.demo.tojson.JsonToObject;
import gson.demo.tojson.ObjectToJson;
public class GsonDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
// javabean to json
Person person = new Person("彭晓", "dslkfjdslf", 344, new Book("java", "vincent"));
System.out.println(ObjectToJson.javabeanToJson(person));
// list to json
List<Person> list = new ArrayList<>();
list.add(person);
Person p = new Person("彭真", "slfjdj", 32423, new Book("android", "郭林"));
list.add(p);
System.out.println(ObjectToJson.listToJson(list));
// map json
Map<String, Person> map = new HashMap<>();
map.put("m1", person);
map.put("m2", p);
System.out.println(ObjectToJson.mapToJson(map));
/**
* 下面是json直接通过gson转换为实例对象
*/
// json to javabean
String json = "{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}";
JsonToObject.jsonToJavaBean(json);
// json to list
String str = "[{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}]";
JsonToObject.jsonToList(str);
// json to map
String mapStr = "{\"m1\":{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},\"m2\":{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"红楼梦\",\"price\":0,\"author\":\"曹雪芹\"}}}";
JsonToObject.jsonToMap(mapStr);
}
}
执行效果