文档章节

FastJson简单使用

金戎君
 金戎君
发布于 2016/07/05 21:34
字数 671
阅读 10
收藏 0
在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用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这个类进行序列化和反序列化。

 

一。简单的序列化

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); 
 } 
   
}

 

二.复杂的数据类型

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); 
   
}

 

三.反序列化

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字符串中可以嵌套各种数据类型。

 

四.日期格式化

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的方法的说明,进行选择。

来自:http://blog.csdn.net/yuanjian19900610/article/details/37737087

本文转载自:http://tbatm.iteye.com/blog/2241861

金戎君
粉丝 0
博文 20
码字总数 0
作品 0
杭州
程序员
私信 提问
Fastjson和Jackson序列化和读取json的性能实测

偶然间看到的阿里出品的Fastjson,网上对这个json包好评如潮,性能胜Jackson10倍。 本人本着眼见为实的想法,自己测试一下两者的性能比较。 POJO对象名字为User,具体代码就不贴了,里面有两...

derekxyz
2014/04/24
5.8K
0
fastjson-1.1.48.android发布,进一步提升在android环境下的性能

进一步提升在android环境下的性能,同时减少内存占用,恢复Stream API,更好兼容之前的版本,jar大小196k,比上一个版本fastjson-1.1.47.android小1k。 Bug Fixed 修复引起的字段类型为java....

wenshao
2016/04/11
1
0
fastjson 1.2.45 发布,Bug 修复版本

Issues 修复PropertyFilter和SerializerFeature.BeanToArray组合使用结果不对的错误 #1580 修复简单类型@jsonfield的 deserializeUsing不起作用问题 修复某些场景下无法支持AutoType的问题 ...

wenshao
2018/01/22
2.1K
3
fastjson 发布 1.1.22 版本

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被...

wenshao
2012/07/11
1K
8
calvinwilliams/okjson

okjson - JAVA编写的小巧、高效、灵活的JSON处理器(JSON解析器+JSON生成器) okjson - JAVA编写的小巧、高效、灵活的JSON处理器(JSON解析器+JSON生成器) 1. 概述 2. 一个示例 2.1. 编写J...

calvinwilliams
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
23分钟前
2
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
36分钟前
3
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
47分钟前
5
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
53分钟前
9
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部