您的位置:首页 > Web前端 > JavaScript

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: