fastJson中常用方法以及遇到的“坑”
1.使用fastJson,首先引入fastJson依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
2.JSON String to Java Bean
/**
* JSON->Java Bean
*/
@Test
public void test1(){
Person person = new Person().setId("1").setName("fastJson").setAge(1);
String jsonString = JSON.toJSONString(person);
System.out.println(jsonString);
//传入字节码,调用parseObject
Person person1 = JSON.parseObject(jsonString, Person.class);
System.out.println(person1);
}
3.JSON String to List Java Bean
/**
* JSON->List Java Bean
*/
@Test
public void test2(){
List<Person> list = Arrays.asList(new Person().setId("1").setName("fastJson1").setAge(1),
new Person().setId("2").setName("fastJson2").setAge(2),
new Person().setId("3").setName("fastJson3").setAge(3));
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
//传入字节码,调用parseArray
List<Person> person1 = JSON.parseArray(jsonString, Person.class);
System.out.println(person1);
}
4.JSON String to List String
/**
* JSON->List String
*/
@Test
public void test3(){
List<String> list = Arrays.asList("hello","world","hello world");
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
// new TypeReference<List<String>>() {}
List<String> list1 = JSON.parseObject(jsonString, new TypeReference<List<String>>() {});
System.out.println(list1);
}
5.JSON String to List<Map<String,Object>>
/**
* JSON->List<Map<String,Object>>
*/
@Test
public void test4(){
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
list.add(map);
Map<String,Object> map1 = new HashMap<>();
map1.put("key11","value11");
map1.put("key22","value22");
list.add(map1);
Map<String,Object> map2 = new HashMap<>();
map2.put("key111","value111");
map2.put("key222","value222");
list.add(map2);
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
// new TypeReference<T>
List<Map<String, Object>> maps = JSON.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() {});
System.out.println(maps);
}
6.JSON.toJSONString中序列化map中的空字符串会出现空对象问题
@Test
public void testJSON() throws Exception {
Map<String,String> map = new HashMap<String, String>();
map.put("aaa",null);
map.put("bbb",null);
map.put("ccc",null);
System.out.println(map);
String s = JSON.toJSONString(map);
System.out.println(s);
Map<String, String> stringMap = JSON.parseObject(s, new TypeReference<Map<String, String>>() {
});
System.out.println(stringMap);
}
上面的代码需要经过如下修改,才不会出现空对象问题
String s = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
7.总结:如果大家在使用fastJSON序列化时出现问题,可以考虑朝着序列化这个方向考虑问题,多了解了解SerializerFeature。我们在学习并使用某一项api时,不仅仅要会这个api,同时
要更加注意这个框架,这个工具类所存在的问题,会有哪些坑!
fastJson中常用方法以及遇到的“坑”的更多相关文章
- fastJSON的常用方法总结
fastJSON的常用方法总结 fastJSON中常用的对象是JSON,JSONArray,JSONObject三个对象.常用的方法如对象转为JSON字符串,JSON字符串转为对象,JSON字符串转为 ...
- 【Fine原创】JMeter分布式测试中踩过的那些坑
最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈, ...
- FastJson中@JSONField注解使用
最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...
- IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法
IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...
- Golang中WaitGroup使用的一点坑
Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...
- fastjson中对象转化为字符串时过滤某字段
fastjson中对象转化为字符串时过滤某字段,有两种方法: 一.在该字符定义上方添加"@JSONField(serialize=false)"注解: 二.调用含有Property ...
- Java分享笔记:File类中常用方法的介绍
java.io包下的File类用于描述和创建一个文件或文件夹对象,只能对文件或文件夹做一些简单操作,不能修改文件的内容,功能比较有限.下面是对于File类中常用方法的程序演示. [1] 演示程序一 p ...
- Vue中的slot(占坑,预留位置)
Vue中的slot(占坑,预留位置) 子模板不使用slot 子模板使用slot 子模板使用使用name属性,且传递data 文件名:Slots.vue //slot组件 <template> ...
- 微信小程序中scroll-view的几个坑
微信小程序中scroll-view的几个坑 1:设置scroll-x时,却不能横向滚动,因为view是block组件,但是这里用了flex就不能滚动了(想用flex布局,请开启属性enable-fle ...
随机推荐
- Employment Planning
Employment Planning 有n个月,每个月有一个最小需要的工人数量\(a_i\),雇佣一个工人的费用为\(h\),开除一个工人的费用为\(f\),薪水为\(s\),询问满足这n个月正常工 ...
- phpStudy的安装和配置
一,下载工具 官网:http://www.phpstudy.net/,选择自己要安装的版本 二.多个站点和域名配置 1.打开phpStudy=>点击“其它选项菜单”=>点击“站点域名管理” ...
- leetcode-168周赛-1297-子串的最大出现次数
题目描述: 自己的提交: class Solution: def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) ...
- elementUI 日期时间选择器 只能选择当前及之后的时间
日期时间选择器 只能选择当前及之后的时间 <el-date-picker class="input-border-null" prefix-icon="el-ic ...
- Java——面向对象知识总结
面向对象的三条主线: 一.类及类的成分 1.类与类的关系: java程序是关注于类的设计. 类从代码的角度:并列关系! 从执行.设计的角度:关联关系.继承关系.聚合关系 class A{ } clas ...
- Java实体与Json操作类
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.Jav ...
- 炼数成金数据分析课程---10、python中如何画图
炼数成金数据分析课程---10.python中如何画图 一.总结 一句话总结: 主要matplotlib库,pandas中也可以画一些基础图 大纲+实例快速学习法 1.matplotlib的最简单画图 ...
- 22. Jmeter NON GUI模式
一般情况下我们都是在NonGUI模式下运行jmeter.这样做有两个好处 节省系统资源,能够产生更大的负载 可以通过命令行参数对测试场景进行更精细的配置 需求:模拟5个用户同时访问百度首页的情况 步骤 ...
- Java方法中形参能否改变实参
前几天学习了java中的参数传递机制,总结了一些知识点: 1·参数类型为基本数据类型:整型:byte,short,int,long ,浮点型:float,double ,字符型:char ,布尔型:b ...
- 剑指offer——55两个链表的第一个公共节点
题目描述 输入两个链表,找出它们的第一个公共结点. 题解: 分别遍历两个链表到链尾,并计算其长度,若最后一个节点相同,则存在公共节点 然后让长链表指针从头先移动长度差个节点,然后两个链表指针一起移动, ...