FastJson简单使用
2016-06-15 17:44
621 查看
http://blog.csdn.net/yuanjian19900610/article/details/37737087?utm_source=tuicool&utm_medium=referral
在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON字符串,出错率就非常大了。并且工作效率也特别低。
我在网上看了一些开源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。
经过测试,个人觉得FastJson执行效率比较高,而且简单易用。
FastJson不依赖于第三方包, 直接可以运行在Java JDK1.5之上,FastJson完全支持http://json.org的标准,支持各种JDK类型,包括基本类型、JavaBean、Collection、Map、Enum、泛型等
还支持循环引用。
FastJson项目是开源的:Fastjson代码托管在github.org上,项目地址是 https://github.com/AlibabaTech/fastjson
一个JSON库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
一。简单的序列化
[java]
view plain
copy
pubic class UserInfo implements Serializable{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
public class TestOne{
public static void main(String[] args){
UserInfo info=new UserInfo();
info.setName("zhangsan");
info.setAge(24);
//将对象转换为JSON字符串
String str_json=JSON.toJSONString(info);
System.out.println("JSON="+str_json);
}
}
二.复杂的数据类型
[java]
view plain
copy
public static void test2() {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("age", 24);
map.put("sex", "男");
//map集合
HashMap<String, Object> temp = new HashMap<String, Object>();
temp.put("name", "xiaohong");
temp.put("age", "23");
map.put("girlInfo", temp);
//list集合
List<String> list = new ArrayList<String>();
list.add("爬山");
list.add("骑车");
list.add("旅游");
map.put("hobby", list);
/*JSON序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串,[eg:String jsonString = JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);]
*fastjson序列化时可以选择的SerializerFeature有十几个属性,你可以按照自己的需要去选择使用。
*/
String jsonString = JSON.toJSONString(map);
System.out.println("JSON=" + jsonString);
}
三.反序列化
[java]
view plain
copy
public void test3(){
String json="{\"name\":\"chenggang\",\"age\":24}";
//反序列化
UserInfo userInfo=JSON.parseObject(json,UserInfo.class);
System.out.println("name:"+userInfo.getName()+", age:"+userInfo.getAge());
}
/**泛型的反序列化*/
public static void test4(){
String json="{\"user\":{\"name\":\"zhangsan\",\"age\":25}}";
Map<String, UserInfoBean> map = JSON.parseObject(json, new TypeReference<Map<String, UserInfoBean>>(){});
System.out.println(map.get("user"));
}
//同理, json字符串中可以嵌套各种数据类型。
四.日期格式化
[java]
view plain
copy
public void test5(){
Date date=new Date();
//输出毫秒值
System.out.println(JSON.toJSONString(date));
//默认格式为yyyy-MM-dd HH:mm:ss
System.out.println(JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));
//根据自定义格式输出日期
System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat));
}
这里举了几个简单的例子, 其它特殊要求可以根据FastJson的方法的说明,进行选择。
例子:
public void onMessage(Message message) {
TaskRequest taskrequest = null;
TaskResponse taskresponse = null;
try {
String data = new String(message.getBody(), "UTF-8");
log.info("收到队列消息={}", data);
taskrequest = JSON.parseObject(data, TaskRequest.class);
log.info("taskrequest:"+taskrequest);
RequestHead requestHead = taskrequest.getHead();
JSONObject body = (JSONObject) taskrequest.getBody();
log.info("body:"+body);
if ("快捷".equals(requestHead.getTxnType())) {
FastPaySign fastPaySign = JSON.parseObject(body.toJSONString(), FastPaySign.class);
在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON字符串,出错率就非常大了。并且工作效率也特别低。
我在网上看了一些开源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。
经过测试,个人觉得FastJson执行效率比较高,而且简单易用。
FastJson不依赖于第三方包, 直接可以运行在Java JDK1.5之上,FastJson完全支持http://json.org的标准,支持各种JDK类型,包括基本类型、JavaBean、Collection、Map、Enum、泛型等
还支持循环引用。
FastJson项目是开源的:Fastjson代码托管在github.org上,项目地址是 https://github.com/AlibabaTech/fastjson
一个JSON库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
一。简单的序列化
[java]
view plain
copy
pubic class UserInfo implements Serializable{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
public class TestOne{
public static void main(String[] args){
UserInfo info=new UserInfo();
info.setName("zhangsan");
info.setAge(24);
//将对象转换为JSON字符串
String str_json=JSON.toJSONString(info);
System.out.println("JSON="+str_json);
}
}
二.复杂的数据类型
[java]
view plain
copy
public static void test2() {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("age", 24);
map.put("sex", "男");
//map集合
HashMap<String, Object> temp = new HashMap<String, Object>();
temp.put("name", "xiaohong");
temp.put("age", "23");
map.put("girlInfo", temp);
//list集合
List<String> list = new ArrayList<String>();
list.add("爬山");
list.add("骑车");
list.add("旅游");
map.put("hobby", list);
/*JSON序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串,[eg:String jsonString = JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);]
*fastjson序列化时可以选择的SerializerFeature有十几个属性,你可以按照自己的需要去选择使用。
*/
String jsonString = JSON.toJSONString(map);
System.out.println("JSON=" + jsonString);
}
三.反序列化
[java]
view plain
copy
public void test3(){
String json="{\"name\":\"chenggang\",\"age\":24}";
//反序列化
UserInfo userInfo=JSON.parseObject(json,UserInfo.class);
System.out.println("name:"+userInfo.getName()+", age:"+userInfo.getAge());
}
/**泛型的反序列化*/
public static void test4(){
String json="{\"user\":{\"name\":\"zhangsan\",\"age\":25}}";
Map<String, UserInfoBean> map = JSON.parseObject(json, new TypeReference<Map<String, UserInfoBean>>(){});
System.out.println(map.get("user"));
}
//同理, json字符串中可以嵌套各种数据类型。
四.日期格式化
[java]
view plain
copy
public void test5(){
Date date=new Date();
//输出毫秒值
System.out.println(JSON.toJSONString(date));
//默认格式为yyyy-MM-dd HH:mm:ss
System.out.println(JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));
//根据自定义格式输出日期
System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat));
}
这里举了几个简单的例子, 其它特殊要求可以根据FastJson的方法的说明,进行选择。
例子:
public void onMessage(Message message) {
TaskRequest taskrequest = null;
TaskResponse taskresponse = null;
try {
String data = new String(message.getBody(), "UTF-8");
log.info("收到队列消息={}", data);
taskrequest = JSON.parseObject(data, TaskRequest.class);
log.info("taskrequest:"+taskrequest);
RequestHead requestHead = taskrequest.getHead();
JSONObject body = (JSONObject) taskrequest.getBody();
log.info("body:"+body);
if ("快捷".equals(requestHead.getTxnType())) {
FastPaySign fastPaySign = JSON.parseObject(body.toJSONString(), FastPaySign.class);
相关文章推荐
- JavaScript 的 Date 最详细解读(转)
- 尝试JSP各种已知漏洞
- js判断是否是数字(个人菜鸟笔记)
- JavaScript 变量作用域、this、闭包
- JS 跨域访问的几种方式
- 记录 【pjsip 中加入G.729 等语音编码】
- 什么是跨域?怎么解决跨域问题?
- 一个坑爹的问题,js注释掉夹杂的el表达式页面不显示(代码颜色坑了我)
- 轻松了解JS中this的指向
- 深入浅析JS的数组遍历方法(推荐)
- Js循环绑定事件处理
- javascript 随记
- 3、javascript脚本语言
- Javascript深度复制对象
- MyEclipse安装JS代码提示(Spket插件)
- JavaScript中function的多义性
- JavaScript中function的多义性
- amCharts图表中的JavaScript中文注释引起的浏览器兼容性问题
- JSON数据中带有HTML标签解决方法
- KnockOut.js入门示例详解