fastjason常用方法
什么是fastjson?
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<String,String> map=new HashMap<String,String>();
map.put("code","0");
map.put("message","ok");
String json=JSON.toJSONString(map);
System.out.println(json);
输出结果为:
{"code":"0","message":"ok"}
实例2:字符串转对象
Map<String,String> map=new HashMap<String,String>();
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
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
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<user> list=new ArrayList<user>(JSONArray.parseArray(jsonString,user.class));
Fastjson 与各种JSON库的性能比较:
| json库 | 序列化性能 | 反序列化性能 | jar大小 |
| fastjson | 1201 | 1216 | fastjson-1.1.26.jar(356k) fastjson-1.1.25-android.jar(226k) |
| jackson | 1408 | 1915 | jackson-annotations-2.1.1.jar(34k) jackson-core-2.1.1.jar(206k) jackson-databind-2.1.1.jar(922k) 总共1162k |
| gson | 7421 | 5065 | gson-2.2.2.jar(189k) |
| json-lib | 27555 | 87292 | json-lib-2.4-jdk15.jar(159k) |
fastjason常用方法的更多相关文章
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- Jquery元素选取、常用方法
一:常用的选择器:(李昌辉) 基本选择器 $("#myDiv") //匹配唯一的具有此id值的元素 $("div") //匹配指定名称的所有元素 $(" ...
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- C# Webbrowser 常用方法及多线程调用
设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...
- list,tuple,dict,set常用方法
Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...
- 记录yii2-imagine几个常用方法
记录yii2-imagine几个常用方法: //压缩 Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)->save(Yii::g ...
- DOM常用方法总结
DOM(Document Object Model:文档对象模型)为javascript中的一部分,它为访问和修改html文档或xml文档提供了一些编程接口,DOM以对象的形式来描述文档中的内容,以树 ...
- JSP内置对象及常用方法
jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...
- java中集合类中Collection接口中的Map接口的常用方法熟悉
1:Map接口提供了将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.Map接口中同样提供了集合的常用方法. 2:由于Map集合中的元素是通过key,value,进行存储的,要 ...
随机推荐
- Cocos2d-x 学习笔记(11.2) RotateBy RotateTo
1. RotateBy RotateTo 两个旋转方法.RotateBy是在当前角度上旋转设置的角度.RotateTo是直接旋转到设置的角度,方向遵循“就近原则”.两者没有相互继承关系. 1.1 成员 ...
- SpringBoot系列:Spring Boot集成Spring Cache,使用EhCache
前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache.RedisCache.ConcurrentMapCac ...
- go-异常处理-error-panic-recover
Go语言的函数可以一次返回多个结果.这就为我们温和地报告错误提供了语言级别的支持. func readFile(path string) ([]byte, error) { file, err := ...
- 【OUC2019写作】论文写作第九小组英语常用表达整理
第一部分: 一.简要综述以往和现在研究: 某方法被认为如何如何:it is well known that; it is regarded as; it is believed to ; It is ...
- python-写入文件
一.写入空文件(覆盖) # coding=UTF-8 filename = 'test_text.txt' with open(filename, 'w') as file_object: file_ ...
- Xbim.GLTF源码解析(三):Builder类
原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10838706.html IFC提取转换成GLTF的逻辑在Builder类中, Buil ...
- Java8系列 (五) Optional类
概述 在Java8之前, 如果需要对一个变量做一次 null 检查, 通常会像下面这样写 T t = service1.query(); if (t != null) { K k = service2 ...
- Bran的内核开发教程(bkerndev)-07 中断描述符表(IDT)
中断描述符表(IDT) 中断描述符表(IDT)用于告诉处理器调用哪个中断服务程序(ISR)来处理异常或汇编中的"int"指令.每当设备完成请求并需要服务事, 中断请求也会调用I ...
- leetcode算法小题(1)
题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...
- Docker之构建上下文详解
昨天写了使用 Dockerfile 定制镜像.其中构建上下文这一块没有写,今天把这一块单独拿出来写一下. Docker镜像构建 简单说下构建镜像步骤: cd Dockerfile 所在目录; 执行 d ...