GsonLib下载链接 Gson相比org.json最大的好处是从json字符串转向java实例时候少了依据每个实例自己赋值的过程,比如在org.json的时候,我们先从json字符串构建一个jsonobject,然后用各种的json get方法获取到每个字段的值,这是一个体力活。而gson依据反射机制我们只要传递我们要实例化的类型class进去返回就是创建好的实例。大大减少了代码量。
构建了三个方法,分别测试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; } }这方面是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()); } } }执行效果