绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
fastjason常用方法
2019-12-24 10:43:04

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到,是目前Java语言中快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

主要特点:

快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)

强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)

零依赖(没有依赖其它任何类库除了JDK)

背景

近关于fastjson的消息,引起了很多人的关注!

fastjson爆出重大漏洞,攻击者可使整个业务瘫痪

漏洞描述

常用JSON组件FastJson存在远程代码执行漏洞,攻击者可通过精心构建的json报文对目标服务器执行任意命令,从而获得服务器权限。此次爆发的漏洞为以往漏洞中autoType的绕过。

影响范围

FastJson < 1.2.48

很多开发者才猛然发现,fastjson已经深入到我们开发工作的方方面面。那么除了赶快升级你的json外,我们来挖挖fastjson常用的用法。

fastjson常用方式

1.maven依赖(记得升级到1.2.48以上版本哦)

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency>

2.FastJson对于json格式字符串的解析主要用到了一下三个类:

(1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

(2)JSONObject:fastJson提供的json对象。

(3)JSONArray:fastJson提供json数组对象。

3.常用方式

3.1 string和java对象

 

实例1:对象转json字符串

Map map=newHashMap();

map.put("code","0");

map.put("message","ok");

String json=JSON.toJSONString(map);

System.out.println(json);

输出结果为:

{"code":"0","message":"ok"}

实例2:字符串转对象

Map map=newHashMap();

map.put("code","0");

map.put("message","ok");

String json=JSON.toJSONString(map);

System.out.println(json);

Map obj=(Map)JSON.parse(json);

System.out.println("code="+obj.get("code")+",message="+obj.get("message"));

输出结果

{"code":"0","message":"ok"}

code=0,message=ok

3.2 工具类JSONObject

publicstaticvoid main(String[] args) {

Map map=newHashMap();

map.put("code","0");

map.put("message","ok");

String json=JSON.toJSONString(map);

System.out.println(json);

Map obj=(Map)JSON.parse(json);

System.out.println("code="+obj.get("code")+",message="+obj.get("message"));

String code=JSON.parseObject(json).getString("code");

String message=JSON.parseObject(json).getString("message");

System.out.println("code="+code+",message="+message);

}

输出结果

{"code":"0","message":"ok"}

code=0,message=ok

code=0,message=ok

3.3 数组对象

List list=newArrayList(JSONArray.parseArray(jsonString,user.class));

Fastjson 与各种JSON库的性能比较:

 

json库序列化性能反序列化性能jar大小

fastjson12011216fastjson-1.1.26.jar(356k)

fastjson-1.1.25-android.jar(226k)

jackson14081915jackson-annotations-2.1.1.jar(34k)

jackson-core-2.1.1.jar(206k)

jackson-databind-2.1.1.jar(922k)

总共1162k

gson74215065gson-2.2.2.jar(189k)

json-lib2755587292json-lib-2.4-jdk15.jar(159k)

分享好友

分享这个小栈给你的朋友们,一起进步吧。

凉城时光
创建时间:2019-12-04 10:57:57
朋友 我们一起聊运维
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 我没
    栈主

小栈成员

查看更多
  • unnamed personq
  • unnamed personq
  • bluetooth
  • amadan
戳我,来吐槽~