JSON的学习与使用 (8)

FastJson 是由阿里巴巴开源的 JSON 解析库,它可以进行快速的序列化和反序列化。功能还是很强大的。使用 fastjson 需要注意,转换的类必须有默认的无参构造函数。

Github:fastjson

fastjson 对于 JSON 字符串解析主要用到了下面三个类:

JSON:fastjson 的解析器,提供 toJSONString 和 parseObject 方法对 JSON 进行序列化和反序列化。

JSONObject:fastjson 提供的 json 对象。

JSONArray:fastjson 提供的 json 数组对象。

依赖

使用 fastjson 前,需要引入相关依赖。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.61</version>
</dependency>

fastjson 工具类

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

    public static String bean2json(Object object){
        return JSON.toJSONString(object);
    }
    /**
     * json 转换为 bean
     */

    public static Object json2bean(String json,Class c){
        return JSON.parseObject(json,c);
    }
    /**
     * list 转换为 Json 字符串
     */

    public static String list2json(List list){
        return JSON.toJSONString(list);
    }
    /**
     * json 转换为 list
     */

    public static List json2List(String json,Class c){
        return JSON.parseArray(json,c);
    }
    /**
     * set 转换为 Json 字符串
     */

    public static String set2json(Set set){
        return  JSON.toJSONString(set);
    }
    /**
     * json 转换为 set
     */

    public static Set json2Set(String json){
        return JSON.parseObject(json,Set.class);
    }
    /**
     * map 转换为 Json 字符串
     */

    public static String map2json(Map map){
        return  JSON.toJSONString(map);
    }
    /**
     * json 转换为 map
     */

    public static Map json2Map(String json){
        return JSON.parseObject(json);
    }
}

实例代码

public class FastJsonTest {
    public static void main(String[] args) {
        //1. bean 和 json 互转
        Person person = new Person("xiaoli",18);
        String json = FastJsonUtil.bean2json(person);
        System.out.println(json);
        Person person2 = (Person)FastJsonUtil.json2bean(json, Person.class);
        System.out.println(person2.toString());
        //2. list 和 json 互转
        List<Person> list = new ArrayList<Person>();
        list.add(new Person("李四",10));
        list.add(new Person("王五",20));
        String listJson = FastJsonUtil.list2json(list);
        System.out.println(listJson);
        List json2List = FastJsonUtil.json2List(listJson, Person.class);
        System.out.println(json2List.toString());

        //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 = FastJsonUtil.map2json(map);
        System.out.println(mapJson);
        Map<Object, Object> map2 = FastJsonUtil.json2Map(mapJson);
        System.out.println(map2.toString());

        //4. set 与 json 互转
        Set<Person> set = new LinkedHashSet<Person>();
        set.add(new Person("李四",10));
        set.add(new Person("王五",20));
        String setJson = FastJsonUtil.set2json(set);
        System.out.println(setJson);
        Set set1 = FastJsonUtil.json2Set(setJson);
        System.out.println(set1.toString());
    }
}

运行结果:
{"age":18,"name":"xiaoli"}
Person(name=xiaoli, age=18)
[{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
[Person(name=李四, age=10), Person(name=王五, age=20)]
{"map2":{"age":20,"name":"王五"},"map1":{"age":10,"name":"李四"}}
{"map2":{"name":"王五","age":20},"map1":{"name":"李四","age":10}}
[{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
[{"name":"王五","age":20}, {"name":"李四","age":10}]

小结

fastjson 虽然很快,我还是挺推荐使用的,但还是有些缺点的。具体详见:fastjson这么快老外为啥还是热衷 jackson?

总结

我们对本篇文章做个总结:

什么是 JSON:数据交互语言,独立于任何程序语言的文本格式。

为什么使用 JSON:javaScript 原生支持 JSON,解析速度更快;比 xml 更易使用。

如何使用 JSON:

了解了 JSON 的数据结构:对象和数组。

Json 在 javaScript 中的使用:操作 json 对象和数组,通过 parse() 和 stringift() 实现 json 的反序列化和序列化。

Json 在 Java 中的使用:介绍了 Json-lib、Gson、Jackson 和 fastjson,并且对这些工具常用的序列化和反序列化的实现进行了封装。

对此,我们了解了 JSON,并且会对 JSON 进行序列化和反序列化。

参考

除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?

JSON入门看这一篇就够了

高性能JSON框架之FastJson的简单使用

fastjson 的使用总结

fastjson的基本使用方法

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

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