添加jackson依赖:

// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.2'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.2'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.8.2'

看到fasterxml还以为找错依赖,还以为和com.alibaba:fastjson这个有啥联系,还以为是一个叫做jack的人写的。为啥有三个依赖,当发现大多数的框架都依赖于jackson来处理json转换的时候就自然而然的当做理所当然了。

POJO序列化为json字符串:

准备一个POJO:

@JsonIgnoreProperties(ignoreUnknown = true)
class User implements Serializable {
private static final long serialVersionUID = -5952920972581467417L;
private String name; public User() {
} public User(String name) {
this.name = name;
} public String getName() {
return name;
} @Override
public String toString() {
return "User{" +
"name=" + name +
'}';
}
}
  • @JsonIgnoreProperties(ignoreUnknown = true) 是为了反序列化的时候,如果遇到不认识的filed,忽略之
  • 无参构造函数是为了在反序列化的时候,jackson可以创建POJO实例
  • getter方法是为了序列化的时候,jackson可以获取filed值
  • toString是方便我自己debug看显示
  • 至于Serializable,习惯的给实体增加一个持久化的能力。

通过write来转化成jason字符串:

String expected = "{\"name\":\"Test\"}";
String test = mapper.writeValueAsString(new User("Test"));
Assert.assertEquals(expected, test);

通过read来parse json字符串为POJO对象:

User user = mapper.readValue(expected, User.class);
Assert.assertEquals("Test", user.getName());

jsonArray转换成Array数组:

String expected = "[{\"name\":\"Ryan\"},{\"name\":\"Test\"},{\"name\":\"Leslie\"}]";
ArrayType arrayType = mapper.getTypeFactory().constructArrayType(User.class);
User[] users = mapper.readValue(expected, arrayType);
Assert.assertEquals("Ryan", users[0].getName());

jsonArray转换成List<>泛型:

expected="[{\"a\":12},{\"b\":23},{\"name\":\"Ryan\"}]";
CollectionType listType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, User.class);
//the sieze of the list is dependon the str json length although the json content is not the POJO type maybe
List<User> userList = mapper.readValue(expected, listType);
Assert.assertEquals(3, userList.size());
Assert.assertNull(userList.get(0).getName());
Assert.assertEquals("Ryan",userList.get(2).getName());

jackson默认将对象转换为LinkedHashMap:

String expected = "[{\"name\":\"Ryan\"},{\"name\":\"Test\"},{\"name\":\"Leslie\"}]";
ArrayList arrayList = mapper.readValue(expected, ArrayList.class);
Object o = arrayList.get(0);
Assert.assertTrue(o instanceof LinkedHashMap);

最新文章

  1. n+1 &lt; n , are you sure?
  2. Security Test Cases
  3. root用户自动登录
  4. VoxelGrid体素滤波器对点云进行下采样
  5. [AX2012]Claims user
  6. C# Remoting的一个简单例子
  7. 用“逐步排除”的方法定位Java服务线上“系统性”故障(转)
  8. 关于oracle数据库(8)查询2
  9. android:在ViewPager中使用Button
  10. Excel文件按照指定模板导入数据(用jxl.jar包)
  11. vue基于webpack说明
  12. 过滤html标签
  13. scrapy爬虫学习系列四:portia的学习入门
  14. C#与SQL Server数据库连接
  15. Sql Server 数据库表结构,存储过程,视图比较脚本
  16. shell编程—运算符(五)
  17. CSS--position:relative和position:absolute
  18. .netcore读取配置文件
  19. MVC中修改Table值
  20. ghost之后仍然中病毒----与病毒的斗争

热门文章

  1. innerHTML 与 innerText 的区别
  2. iOS TTF文件使用---改变字体
  3. linux下google chrome浏览器字体修改
  4. rpm打包
  5. solr与.net系列课程(九)solr5.1的配置
  6. subversion 版本库数据迁移 从一台服务器迁移到另一台新有服务器
  7. Comparing the Performance of .NET Serializers(zz)
  8. Friendship
  9. C#WebBrowser控件使用教程与技巧
  10. 经历:如何设置jquery easyui中下拉框不可编辑
  11. Unity3D中读取CSV文件
  12. UML建模工具-火龙果软件
  13. mysql存储过程和触发器的应用
  14. CentOS 7.2mini版本下编译安装php7.0.10+MySQL5.7.14+Nginx1.10
  15. 5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
  16. JAVA版exe可执行加密软件
  17. 新的WireGuard快照发布
  18. jQuery事件和动画
  19. 一个Linux下C线程池的实现
  20. HDU 3183.A Magic Lamp-区间找最小值-RMQ(ST)