JSON的学习与使用 (4)

示例代码:

public class JsonlibTest {

    public static void main(String[] args) {
        //1. bean 和 json 互转
        Person person = new Person("xiaoli",18);
        String json = JsonLibUtils.bean2json(person);
        // {"age":18,"name":"xiaoli"}
        Person person2 = (Person)JsonLibUtils.json2bean(json, Person.class);

        //2. list 和 json 互转
        List<Person> list = new ArrayList<Person>();
        list.add(new Person("李四",10));
        list.add(new Person("王五",20));
        String listJson = JsonLibUtils.list2json(list);
        // [{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
        List json2List = JsonLibUtils.json2List(listJson);

        //3. map 转 json
        Map<String,Person> map = new HashMap<String,Person>();
        map.put("map1",new Person("李四",10));
        map.put("map2",new Person("王五",20));
        String mapJson = JsonLibUtils.map2json(map);
        // {"map2":{"age":20,"name":"王五"},"map1":{"age":10,"name":"李四"}}
        Map<Object, Object> map2 = JsonLibUtils.json2Map(mapJson);

        //4. set 与 json 互转
        Set<Person> set = new LinkedHashSet<Person>();
        set.add(new Person("李四",10));
        set.add(new Person("王五",20));
        String setJson = JsonLibUtils.set2json(set);
        // [{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
        JsonLibUtils.json2Set(setJson);
    }
}

缺点

依赖的包过多。

复杂类型的转换有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。

不推荐使用 Json-lib 的 n 个理由

小结

json-lib 提供两个对象,分别是 JSONObject 和 JSONArray,分别对应着 JSON 的两个数据结构。根据需要选取转换的对象。但是由于 json-lib 已经 n 多年没有维护,缺陷较多,在功能和性能方面已经无法满足我们的需求,所以尽量还是不用为好。

Gson

Gson 是 Google 公司发布的一个开源代码的 Java 库,主要用途为序列化 Java 对象为 JSON 字符串,或反序列化 JSON 字符串为 Java 对象。

Gson 提供了 fromJson()和 toJson() 两个用于解析和生成的方法,前者实现反序列化,后者实现了序列化。

依赖

使用 Gson 需要引入这个依赖。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
    <scope>compile</scope>
</dependency>

Gson 工具类

封装一些常用方法的转换工具类。

public class GsonUtil {
    /**
     * bean 转换为 Json 字符串
     */

    public static String bean2json(Object object){
        Gson gson = new Gson();
        return gson.toJson(object);
    }
    /**
     * json 转换为 bean
     */

    public static Object json2bean(String json,Class c){
        Gson gson = new Gson();
        return gson.fromJson(json,c);
    }
    /**
     * list 转换为 Json 字符串
     */

    public static String list2json(List list){
        Gson gson = new Gson();
        return gson.toJson(list);
    }
    /**
     * json 转换为 list
     */

    public static List json2List(String json){
        Gson gson = new Gson();
        return gson.fromJson(json,new TypeToken<List>(){}.getType());
    }
    /**
     * set 转换为 Json 字符串
     */

    public static String set2json(Set set){
        Gson gson = new Gson();
        return  gson.toJson(set);
    }
    /**
     * json 转换为 set
     */

    public static Set json2Set(String json){
        Gson gson = new Gson();
        return gson.fromJson(json,new TypeToken<Set>(){}.getType());
    }
    /**
     * map 转换为 Json 字符串
     */

    public static String map2json(Map map){
        Gson gson = new Gson();
        return  gson.toJson(map);
    }
    /**
     * json 转换为 map
     */

    public static Map json2Map(String json){
        Gson gson = new Gson();
        return gson.fromJson(json,new TypeToken<Map>(){}.getType());
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzfjp.html