fastjson是什么东东?
fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
pom.xml
depencency:
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.34</version>
</dependency>
http://www.cnblogs.com/Jie-Jack/p/3758046.html
序列化
序列化就是指 把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
fastjson是什么东东?的更多相关文章
- json是个啥东东
xml 不用说 只要是搞web开发的 没听说谁不知道的 一种类似数据传输格式定义的语言 但是他却不是一个真正的轻量级的东西 其他的不说 只要传输一点很少的数据 经过他那左括号右括号 还有什么属性 一包 ...
- 长见识了,知道了collected和Graphite 这两个东东
今天下午的讨论会议中,听到了两个名词collected和Graphite这是神马东东,以前在bingo的时候也没听说过,开完会下去查了下.原来他两是监控系统的啊.以前也从来没做过系统监控方面的项目,这 ...
- BPEL是个什么东东
研究团队有个做智能服务组合的,其中用到叫BPEL的东西,因为全称是Business Process Execution Language,译成中文就是商业执行过程语言,这个东东的是整合SOA的一个执行 ...
- SQLSERVER 里经常看到的CACHE STORES是神马东东?
SQLSERVER 里经常看到的CACHE STORES是神马东东? 当我们在SSMS里执行下面的SQL语句清空SQLSERVER的缓存的时候,我们会在SQL ERRORLOG里看到一些信息 DBCC ...
- 【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)
[题意] 平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方. 另外还有q(0<=q<=8)个套餐 ...
- JSNI GWT中的东东
二.JavaScript Native InterfaceJavaScript本地接口JSNI.1)声明一个本地方法在JSNI中声明一个本地方法时,使用Java的标准native关键字,就像在JNI( ...
- Lambda 表达式 是 个 好东东
Lambda 表达式 是 个 好东东 首先,通过 Lambda 表达式 + 动态语言特性 dynamic , C# 已经 可以 实现 函数式 编程 了 其次, 利用 Lambda, 可以 实现 AOP ...
- 页面生命周期里面还有很东西,如PageHandlerFactory等等这些东东也够吃一壶的,发现每走到一个领域,发现要学的东西实在是太多太多啦,总感觉自己所学的东西只是沧海一粟,走过了这道坎,又是一片海洋,我只能呐喊:生命永不止息,学海无涯----够用就好。
页面生命周期里面还有很东西,如PageHandlerFactory等等这些东东也够吃一壶的,发现每走到一个领域,发现要学的东西实在是太多太多啦,总感觉自己所学的东西只是沧海一粟,走过了这道坎,又是一片 ...
- (转)loff_t *ppos是什么东东
ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos) 这是一个文件读函数 我们很容 ...
- 在JS中,一切东东其实都是对象
对象是组成JavaScript的基本单元,在JS中,一切东东其实都是对象,而且功能非常强大,它不仅风格独特,功能也与众不同. 一.引用(reference) 引用的概念是JS的基础之一,它是指向对象实 ...
随机推荐
- 8、导航:Nav
1.导航视图 angular2 中的是视图是显示在<router-outlet></router-outlet>里的同时他要依赖于 directives:[ ROUTER_ ...
- Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard
上一篇,介绍了Silverlight动画设计基础知识,Silverlight动画是基于时间线的,对于动画的实现,其实也就是对对象属性的修改过程. 而Silverlight动画分类两种类型,From/T ...
- A space or line break was encountered after the "@" character. Only valid identifiers, keywords, comments, "(" and "{" are valid at the start of a code block and they must occur immediately following
mvc 控制器调用分布视图出错,("A space or line break was encountered after the "@" character. Only ...
- 理解 Azure 虚拟机的性能监视
随着越来越多的用户将生产应用迁移到云平台,一些传统 IT 的运维功能也相应的需要改变,例如监控,备份等等.我们希望通过这一系列的文章来协助用户更好的理解在 Azure 云平台上实现资源监控的方法. 在 ...
- C#项目””是针对”.NETFramework,Version=v4.5.2”但此计算机没有,需要修改为v4.5.1.
每次下载别人的代码都会出现这样的问题,以为是没有安装.NETFramework,就下载安装了,但是每次安装都会出现已安装高版本的4.6(Win10自带),无需下次安装,但是每次VS中都会显示有问题,而 ...
- aspose.word 读取word段落内容
注:转载请标明文章原始出处及作者信息 aspose.word 插件下载 链接: http://pan.baidu.com/s/1qXIgOXY 密码: wsj2 使用原因:无需安装office,无兼容 ...
- [Java反射基础二]获取类的信息
本文接上文“Class类的使用”,以编写一个用来获取类的信息(成员函数.成员变量.构造函数)的工具类来讲解"反射之获取类的信息" 1.获取成员函数信息 /** * 获取成员函数信息 ...
- 使用RabbitMQ实现延迟任务----实用场景
1. 使用RabbitMQ实现延迟任务
- maven(5)--依赖特性
依赖的子标签中有scope,常用值有compile.provide.test.runtime compile:编译范围有效,即编译和打包时都会将这个依赖存储 provide:编译测试有效,但是打包是将 ...
- CSS实现微信对话框