Gson在java对象和json字符串之间转换

    xiaoxiao2023-03-24  4

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

    执行效果

    转载请注明原文地址: https://ju.6miu.com/read-1201400.html
    最新回复(0)