fastjson(fastjson和jackson)

http://www.itjxue.com  2023-01-29 06:07  来源:未知  点击次数: 

阿里巴巴旗下-FastJson工具类

fastjson是阿里巴巴公司出品的一个java语言编写的高性能且功能完善的JSON函数库,他采用一种“假定有序快速匹配”的算法,把JSON parse的性能提升到极致,号称是目前java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化,协议交互。Web输出、Android客户端等多种应用场景。

序列化:

JSON.toJSONString(getDataToGson())

反序列化:

JSON.parseObject(JSON_STRING).toString()

由于是java语言是互通的,因此,在以前的Android上使用时,Fastjson不可避免的引入了很多对于Android而言冗余的功能,从而增加了包的大小,很多人使用的就是标准版本的fastjson,但事实上,fastjson还存在一个专门为android定制的版本-fastjson-android。和标准版相比,Android版本中去掉了一些Android虚拟机dalvik不支持的功能,使得jar更小。 (本人并未试过)

如果对您有用请给个点赞收藏可好?

阿里fastjson到底如何使用

json是一种文件传输格式,类似于以 "/t" 分割,csv文件,是一种数据标准。

json的数据格式是这样的:

大家一看就明白,类似于Map,是一种键值对的存在,其中{....} 代表对象,[..]代表数组,中间以逗号分割。具体就不多说了,想要了解的随便一搜就有很多。。。

接下来看阿里fastjson的用法:

首先fastjson是目前用途最广泛,也是最好用的一种json工具。

首先你拿到json数据后可以使用parse方法将数据转化为json对象(底层Map)

这样你想要拿什么字段值直接 jsonObject.get("字段名")就可以了

fastjson再曝重大安全漏洞,严重可导致服务瘫痪

2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修复当字符串中包含\\x转义字符时可能引发OOM的问题的修复。

360CERT 判断该漏洞危害中。影响面较大。攻击者可以通过发送构造好的请求而致使当前线程瘫痪,当发送的恶意请求过多时有可能使业务直接瘫痪。

建议广大用户对自身的业务/产品进行组件自查,确认fastjson版本至少升级到1.2.60

漏洞的关键点在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,当传入json字符串时,fastjson会按位获取json字符串,当识别到字符串为\\x为开头时,会默认获取后两位字符,并将后两位字符与\\x拼接将其变成完整的十六进制字符来处理:

而当json字符串是以\\x结尾时,由于fastjson并未对其进行校验,将导致其继续尝试获取后两位的字符。也就是说会直接获取到\\u001A也就是EOF:

当fastjson再次向后进行解析时,会不断重复获取EOF,并将其写到内存中,直到触发oom错误:

最终效果为:

fastjson 1.2.60版本

2019-09-03 fastjson提交修补commit

2019-09-05 360CERT发布预警

2019-09-07 周末加班升级!

PS:jackson最近也发布了多个版本进行漏洞修复。

FastJson和Json以及@ResponseBody

@Restcontroller是@Controller和@ResponseBody的结合体,将后台返回的Java对象转换为Json字符串传递给前台。它是springmvc通过配置MappingJackson2HttpMessageConverter实现的,spring默认带的转json包为jackson,因为fastJson比较快一般会引入fastjson来替换。

解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准,需要使用@JsonProperty和@JSONField注解。

@jsonProperty是Jackson的包,@JSONproperty这个注解用于属性上面

而@jsonfield是fastjson的包,@JSONField这个注解可以用于get、set以及属性上面@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")是时间的格式化,可以用于get、set以及属性上面

FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。FastJson的API十分简洁,FastJson重要的类为JSONObject,经常调用的方法如下:

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。

Jackson相对来说比较高效的Json类库,在项目中主要使用Jackson进行JSON和Java对象转换,Jackson ObjectMapper类是使用Jackson解析JSON最简单的方法。可以从字符串、流或文件解析JSON,并创建Java对象或对象图来表示已解析的JSON。将JSON解析为Java对象也称为从JSON反序列化Java对象

1.JAVA对象转JSON

ObjectMapper mapper = new ObjectMapper();

String bjectMapper = mapper.writeValueAsString(obj);

2.JSON转Java类[JSON反序列化]

ObjectMapper mapper = new ObjectMapper();

HashMapString, Object inMap = mapper.readValue(jsonStr, HashMap.class);

fastjson如何升级到1.2.83

1、首先打开fastjson应用。

2、其次点击设置,找到版本更新。

3、最后点击版本更新,就可以升级到1.2.83。

4、fastjson是一款java类库的软件,可以被用来把Java对象转换成Json方式。

(责任编辑:IT教学网)

更多

相关管理维护文章

推荐管理维护文章