zoukankan      html  css  js  c++  java
  • Json之FastJson

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
    速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;
    功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;

    Fastjson究竟有多快? 

      序列化时间 反序列化时间 大小 压缩后大小
    java序列化 8654 43787 889 541
    hessian 6725 10460 501 313
    protobuf 2964 1745 239 149
    thrift 3177 1949 349 197
    avro 3520 1948 221 133
    json-lib 45788 149741 485 263
    jackson 3052 4161 503 271
    fastjson 2595 1472 468 251

    Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

    public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
    public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
    public static final  T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean 
    public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
    public static final  List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合 
    public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
    public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
    public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

    FastJson小弟主要就是使用map封装,javaBean封装,解析的时候使用javaBean。

    首先说map封装,一个map就是一个类,一个list就是一个集合数组。直接附上源码

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("success", true);
    map.put("resultCode", "200");
    map.put("resultMessage", "操作成功");
    // map集合
    List<Map> list = new ArrayList<Map>();
    HashMap<String, Object> mapA = new HashMap<String, Object>();
    mapA.put("code", 8);
    mapA.put("desc", "4115");
    mapA.put("hash", "");
    mapA.put("key", "");
    HashMap<String, Object> mapB = new HashMap<String, Object>();
    mapB.put("code", 8);
    mapB.put("desc", "4115");
    mapB.put("hash", "");
    mapB.put("key", "");
    list.add(mapA);
    list.add(mapB);
    map.put("items", list);
    String jsonString = JSON.toJSONString(map);

    输入的json如下

    {
    	"resultCode": "200",
    	"resultMessage": "操作成功",
    	"success": true,
    	"items": [{
    		"desc": "4115",
    		"hash": "",
    		"code": 8,
    		"key": ""
    	}, {
    		"desc": "4115",
    		"hash": "",
    		"code": 8,
    		"key": ""
    	}]
    }
    
    

    下面说javaBean的序列化和反序列化,实体类需要实现Serializable接口。

    BaseJsonObject.java只有三个基本属性,需要实现Serializable接口。

    private boolean success;
    private Integer resultCode;
    private String resultMessage;

    LoginResult.java继承BaseJsonObject类。需要返回用户信息,充值信息,服务器信息

    private UserItem userInfo;
    private ServerItemList serverInfo;
    private ChargeItem chargeInfo;

    UserItem.java类内都是一些用户的基本属性

    private Integer userID;
    private String userName;
    private String mac;
    private String token;
    private String port;

    ServerItemList.java

    private List<ServerItem> serverList;

    ServerItem.java

    private Integer sid;
    private String ip;
    private String name;
    private Integer nodeType;
    private String description;

    ChargeItem.java

    private Integer cid;
    private String alipayId;
    private Integer chargeStatus;
    private String chargeTime;
    private String expireDate;
    private Double chargeMoney;
    private MenuItem menuInfo;

    MenuItem.java

    private Integer menuId;
    private String menuName;
    private Double menuMoney;
    private Integer menuDays;
    private String menuRemark;

      至此,javaBean就封装完毕,get,set方法省略。

    接着就是给javaBean赋值,最后调用fastJson的toJSONString即可得到JSON字符串

    {
    	"resultCode": 200,
    	"resultMessage": "获取个人信息成功",
    	"success": true,
    	"result": {
    		"userInfo": {
    			"cryption": "aes-256-cfb",
    			"mac": "MyNameIsMac",
    			"port": "1+THwxIwo/g=",
    			"userID": 1,
    			"userName": "user"
    		},
    		"chargeInfo": {
    			"chargeMoney": 24,
    			"cid": 15,
    			"expireDate": "2016-05-20",
    			"menuInfo": {
    				"menuDays": 30,
    				"menuId": 1,
    				"menuMoney": 5,
    				"menuName": "包月"
    			}
    		},
    		"serverInfo": {
    			"serverList": [{
    				"description": "美国高速1",
    				"ip": "127.0.0.1",
    				"name": "第一个节点"
    			}, {
    				"description": "香港高速-1",
    				"ip": "127.0.0.1",
    				"name": "HK高速"
    			}]
    		}
    	}
    
    }
    
    

    反序列化封装好javaBean后,调用fastJson的 parseObject方法。

  • 相关阅读:
    hdu5834 Magic boy Bi Luo with his excited tree 【树形dp】
    POJ2152 Fire 【树形dp】
    POJ1848 Tree 【树形dp】
    hdu3586 Information Disturbing 【树形dp】
    BZOJ4557 [JLoi2016]侦察守卫 【树形dp】
    BZOJ4000 [TJOI2015]棋盘 【状压dp + 矩阵优化】
    BZOJ1487 [HNOI2009]无归岛 【仙人掌dp】
    BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】
    洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
    3-3 银行业务队列简单模拟
  • 原文地址:https://www.cnblogs.com/jimmy-muyuan/p/5351919.html
Copyright © 2011-2022 走看看