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 ...
随机推荐
- 【leetcode】969. Pancake Sorting
题目如下: Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.len ...
- yarn安装node-sass报错问题
react前端项目在用yarn install命令安装依赖时报错了,看了下报错信息是node-sass安装的时候编译报错. 解决方法: 第一步:配置淘宝镜像 yarn config set regis ...
- USB之Main item, Local item和Global item 的作用范围与归类
https://doc.micrium.com/display/OSUM50300/USB+Device+HID+Class+Overview report descriptor –> item ...
- magento开发 -- 修改当前用户的客户组
$customer = Mage::getSingleton('customer/session')->getCustomer(); $customer->setData( 'group_ ...
- Robot Framework:接口测试
---恢复内容开始--- robotframework进行接口测试,需要安装Request和RequestLibrary包 pip install requests pip install -U ro ...
- NX二次开发-Block UI C++界面Toggle(开关)控件的获取(持续补充)
NX9+VS2012 public: void SetBlockUIShow(); void ToggleInt::SetBlockUIShow() { //获取开关控件 //获取枚举控件 Prope ...
- docker组件如何协作(7)
还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...
- STM32嵌入式开发学习笔记(三):使用按键控制小灯
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...
- RobotFramework 切换窗口控制的用法小结
一:滚动条控制 应用场景:通过滚动条的上下,左右移动,才能让定位的元素可见.
- strlen、strcpy和strcmp源码
1.不使用库函数实现strcpy #include <assert.h> char *strcpy(char *dst, const char *src) { assert((dst != ...