加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FastJSON 简单使用

发布时间:2020-12-16 18:44:23 所属栏目:百科 来源:网络整理
导读:FastJSON是一个Java语言编写的高性能,功能完善,完全支持 http://json.org 的标准的JSON库。多了不说了,百度一下一大把。 在此,简单的总结一下自己用过,测试过的方法。 如果使用Maven,在pom.xml文件加入以下依赖。 dependency groupIdcom.alibaba/groupI

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

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

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

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

  

序列化

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

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

?

1.基本的序列化

String objJson = JSON.toJSONString(Object object);

  

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

例1:将Map转成JSON

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

  

输出结果:

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

  

?

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

List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
         
 Map<String,Object> map1 = new HashMap<String,Object>();
 map1.put("key1","One");
 map1.put("key2","Two");
         
 Map<String,Object> map2 = new HashMap<String,Object>();
 map2.put("key1","Three");
 map2.put("key2","Four");
        
 list.add(map1);
 list.add(map2);
      
String listJson = JSON.toJSONString(list);

  

输出结果:

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

  

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

?

User user = new User();
 user.setUserName("李四");
 user.setAge(24);
         
 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);

  

输出结果为:

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

  

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。

?

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

  

输出结果:

1401370199040

  

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

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

  

输出结果:

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

  

?

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

例7:指定输出日期格式。

?

String dateJson = JSON.toJSONStringWithDateFormat(new Date(),"yyyy-MM-dd HH:mm:ss.SSS");
         
 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:

Map<String,Object>();
         
 String b = null;
 Integer i = 1;
         
 map.put("a",b);
 map.put("b",i);
         
 String listJson = JSON.toJSONString(map,SerializerFeature.WriteMapNullValue);

  

输出结果:

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

  

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

例11:

User user = new User();
         
 user.setAge(18);
 user.setUserName("李四");
         
 String listJson = JSON.toJSONString(user,SerializerFeature.WriteClassName);

  

输出结果:

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

  



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

例12:将例11反序列化。

?

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

  

输出结果:

18

  

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

?

反序列化

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

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

?

?简单举几个例子。

指定Class信息反序列化。

例13:将例3反序列化。

?

User user1 = JSON.parSEObject(userJson,User.class);
System.out.println(user1.getUserName());

  

?

输出结果:

李四

  

集合反序列化。

例14:将例2反序列化。

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

  

输出结果:

One
 Two
 Three
 Four

  

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

例15:将例1反序列化。

?

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

  

?

输出结果:

One
Two

  

?

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

JSONObject,JSONArray是JSON的两个子类。

JSONObject相当于Map<String,Object>,

JSONArray相当于List<Object>。

简单方法示例:

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

?

Map<String,Object>();
  map.put("key1","One");
  map.put("key2","Two");
                             
  JSONObject j = new JSONObject(map);
                     
  j.put("key3","Three");
            
  System.out.println(j.get("key1"));
 System.out.println(j.get("key2"));
 System.out.println(j.get("key3"));

  

?

输出结果:

One
 Two
 Three

  

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

List<Map<String,Object>>();
          
  Map<String,"Two");
          
  Map<String,Object>();
  map2.put("key1","Three");
  map2.put("key2","Four");
         
 list.add(map);
 list.add(map2);
         
 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
          
 for(int i=0; i<j.size(); i++){
     System.out.println(j.get(i));

  

输出结果:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读