• FastJSON 简单使用


    FastJSON是一个Java语言编写的高性能,功能完善,完全支持http://json.org的标准的JSON库。多了不说了,百度一下一大把。

    在此,简单的总结一下自己用过,测试过的方法。

    如果使用Maven,在pom.xml文件加入以下依赖。

    1 <dependency>
    2     <groupId>com.alibaba</groupId>
    3     <artifactId>fastjson</artifactId>
    4     <version>1.1.23</version>
    5 </dependency>

    序列化

    序列化就是指 把JavaBean对象转成JSON格式的字符串。

    com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化。

    1.基本的序列化

    String objJson = JSON.toJSONString(Object object);

    传入一个对象,将对象转成JSON字符串。

    例1:将Map转成JSON

    1 Map<String, Object> map = new HashMap<String, Object>();
    2 map.put("key1", "One");
    3 map.put("key2", "Two");
    4         
    5 String mapJson = JSON.toJSONString(map);
    

    输出结果:

    {"key1":"One","key2":"Two"}

    例2:将List<Map>转成JSON。

     1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
     2         
     3 Map<String, Object> map1 = new HashMap<String, Object>();
     4 map1.put("key1", "One");
     5 map1.put("key2", "Two");
     6         
     7 Map<String, Object> map2 = new HashMap<String, Object>();
     8 map2.put("key1", "Three");
     9 map2.put("key2", "Four");
    10         
    11 list.add(map1);
    12 list.add(map2);
    13         
    14 String listJson = JSON.toJSONString(list);

    输出结果:

    [{"key1":"One","key2":"Two"},{"key3":"Three","key4":"Four"}]

    例3:自定义JavaBean User转成JSON。

    1 User user = new User();
    2 user.setUserName("李四");
    3 user.setAge(24);
    4         
    5 String userJson = JSON.toJSONString(user);

    输出结果:

    {"age":24,"userName":"李四"}

    可以输出格式化后的 JSON 字符串。

    String objJson = JSON.toJSONString(Object object, boolean prettyFormat);

    传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。

    例4:以例2代码为例。

    String listJson = JSON.toJSONString(list, true);

    输出结果为:

     1 [
     2     {
     3         "key1":"One",
     4         "key2":"Two"
     5     },
     6     {
     7         "key3":"Three",
     8         "key4":"Four"
     9     }
    10 ]

    FastJSON提供了许多特性支持。

    String objJson = JSON.toJSONString(Object object, SerializerFeature... features) 

    传入一个对象和SerializerFeature类型的可变变量。SerializerFeature是一个枚举。

    com.alibaba.fastjson.serializer.SerializerFeature

    你可以根据自己的情况使用这些特性。

    简单说下几个常用的特性:

    1.日期格式化:

    FastJSON可以直接对日期类型格式化,在缺省的情况下,FastJSON会将Date转成long。

    例5:FastJSON将java.util.Date转成long。

    1 String dateJson = JSON.toJSONString(new Date());
    2         
    3 System.out.println(dateJson);

    输出结果:

    1401370199040

    例6:使用SerializerFeature特性格式化日期。

    1 String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
    2         
    3 System.out.println(dateJson);

    输出结果:

    "2014-05-29 21:36:24"

    也可以指定输出日期格式。

    例7指定输出日期格式

    1 String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
    2         
    3 System.out.println(dateJson);

    输出结果:

    "2014-05-29 21:47:00.154"

    2.使用单引号。

    例8:以例2为例。

    String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);

    输出结果:

    [{'key1':'One','key2':'Two'},{'key3':'Three','key4':'Four'}]

    3.JSON格式化。

    例9

    String listJson = JSON.toJSONString(list, SerializerFeature.PrettyFormat);

    输出结果:与例4结果一致。

    4.输出Null字段。

     缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出。

    例10

    1 Map<String, Object> map = new HashMap<String,Object>();
    2         
    3 String b = null;
    4 Integer i = 1;
    5         
    6 map.put("a", b);
    7 map.put("b", i);
    8         
    9 String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);

    输出结果:

    {"a":null,"b":1}

    5.序列化是写入类型信息。

    例11

    1 User user = new User();
    2         
    3 user.setAge(18);
    4 user.setUserName("李四");
    5         
    6 String listJson = JSON.toJSONString(user, SerializerFeature.WriteClassName);

    输出结果:

    {"@type":"User","age":18,"userName":"李四"}

    由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。

    例12:将例11反序列化。

    1 User user1 = (User) JSON.parse(listJson);
    2         
    3 System.out.println(user1.getAge());

    输出结果:

    18

    如果User序列化是没有加入类型信息(SerializerFeature.WriteClassName),按照例12的做法就会报错(java.lang.ClassCastException)。

    反序列化

    反序列化就是把JSON格式的字符串转化为Java Bean对象。

    com.alibaba.fastjson.JSON提供了许多方法(多态)实现反序列化。

     简单举几个例子。

    指定Class信息反序列化。

    例13将例3反序列化。

    1 User user1 = JSON.parseObject(userJson, User.class);
    2 System.out.println(user1.getUserName());

    输出结果:

    李四

    集合反序列化。

    例14将例2反序列化。

    1 List<Map> list1 = JSON.parseArray(listJson, Map.class);
    2          
    3 for(Map<String, Object> map : list1){
    4     System.out.println(map.get("key1"));
    5     System.out.println(map.get("key2"));         
    6 }

    输出结果:

    1 One
    2 Two
    3 Three
    4 Four

    泛型的反序列化(使用TypeReference传入类型信息)。

    例15:将例1反序列化。

    1 Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});
    2 System.out.println(map1.get("key1"));
    3 System.out.println(map1.get("key2"));

    输出结果:

    1 One
    2 Two

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    JSONObject,JSONArray是JSON的两个子类。

    JSONObject相当于Map<String, Object>,

    JSONArray相当于List<Object>。

    简单方法示例:

    例16将Map转成JSONObject,然后添加元素,输出。

     1 Map<String, Object> map = new HashMap<String, Object>();
     2 map.put("key1", "One");
     3 map.put("key2", "Two");
     4                            
     5 JSONObject j = new JSONObject(map);
     6                    
     7 j.put("key3", "Three");
     8           
     9 System.out.println(j.get("key1"));
    10 System.out.println(j.get("key2"));
    11 System.out.println(j.get("key3"));

    输出结果:

    1 One
    2 Two
    3 Three

    例17将List对象转成JSONArray,然后输出。

     1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
     2         
     3 Map<String, Object> map = new HashMap<String, Object>();
     4 map.put("key1", "One");
     5 map.put("key2", "Two");
     6         
     7 Map<String, Object> map2 = new HashMap<String, Object>();
     8 map2.put("key1", "Three");
     9 map2.put("key2", "Four");
    10         
    11 list.add(map);
    12 list.add(map2);
    13         
    14 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
    15          
    16 for(int i=0; i<j.size(); i++){
    17     System.out.println(j.get(i));
    18 }

    输出结果:

    1 {"key1":"One","key2":"Two"}
    2 {"key1":"Three","key2":"Four"}

    更多方法使用请参考API(没有注释的API,让我很头疼啊)。


    end

  • 相关阅读:
    Linux 系统中 sudo 命令的 10 个技巧
    如何在 Linux 中配置基于密钥认证的 SSH
    选择 NoSQL 数据库需要考虑的 10 个问题
    10 个 Linux 中方便的 Bash 别名
    扒一扒 EventServiceProvider 源代码
    [Binary Hacking] ABI and EABI
    瀑布流 ajax 预载入 json
    PHP5+标准函数库观察者之实现
    使用汇编分析c代码的内存分布
    but no declaration can be found for element &#39;aop:aspectj-autoproxy&#39;.
  • 原文地址:https://www.cnblogs.com/Jie-Jack/p/3758046.html
Copyright © 2020-2023  润新知