Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。

一、准备工作

首先去官网下载Jackson工具包,下载地址http://wiki.fasterxml.com/JacksonDownload。Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载:

jackson-core-2.2.3.jar(核心jar包,下载地址

jackson-annotations-2.2.3.jar(该包提供Json注解支持,下载地址

jackson-databind-2.2.3.jar(下载地址

  1. //JSON序列化和反序列化使用的User类
  2. import java.util.Date;
  3. public class User {
  4. private String name;
  5. private Integer age;
  6. private Date birthday;
  7. private String email;
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public Integer getAge() {
  15. return age;
  16. }
  17. public void setAge(Integer age) {
  18. this.age = age;
  19. }
  20. public Date getBirthday() {
  21. return birthday;
  22. }
  23. public void setBirthday(Date birthday) {
  24. this.birthday = birthday;
  25. }
  26. public String getEmail() {
  27. return email;
  28. }
  29. public void setEmail(String email) {
  30. this.email = email;
  31. }
  32. }

二、JAVA对象转JSON[JSON序列化]

  1. import java.io.IOException;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public class JacksonDemo {
  6. public static void main(String[] args) throws ParseException, IOException {
  7. User user = new User();
  8. user.setName("小民");
  9. user.setEmail("xiaomin@sina.com");
  10. user.setAge(20);
  11. SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
  12. user.setBirthday(dateformat.parse("1996-10-01"));
  13. /**
  14. * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
  15. * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
  16. * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
  17. * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
  18. * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
  19. * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
  20. */
  21. ObjectMapper mapper = new ObjectMapper();
  22. //User类转JSON
  23. //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}
  24. String json = mapper.writeValueAsString(user);
  25. System.out.println(json);
  26. //Java集合转JSON
  27. //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]
  28. List<User> users = new ArrayList<User>();
  29. users.add(user);
  30. String jsonlist = mapper.writeValueAsString(users);
  31. System.out.println(jsonlist);
  32. }
  33. }

三、JSON转Java类[JSON反序列化]

  1. import java.io.IOException;
  2. import java.text.ParseException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. public class JacksonDemo {
  5. public static void main(String[] args) throws ParseException, IOException {
  6. String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}";
  7. /**
  8. * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
  9. */
  10. ObjectMapper mapper = new ObjectMapper();
  11. User user = mapper.readValue(json, User.class);
  12. System.out.println(user);
  13. }
  14. }

四、JSON注解

Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。

@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。

@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。

  1. import java.util.Date;
  2. import com.fasterxml.jackson.annotation.*;
  3. public class User {
  4. private String name;
  5. //不JSON序列化年龄属性
  6. @JsonIgnore
  7. private Integer age;
  8. //格式化日期属性
  9. @JsonFormat(pattern = "yyyy年MM月dd日")
  10. private Date birthday;
  11. //序列化email属性为mail
  12. @JsonProperty("mail")
  13. private String email;
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public Integer getAge() {
  21. return age;
  22. }
  23. public void setAge(Integer age) {
  24. this.age = age;
  25. }
  26. public Date getBirthday() {
  27. return birthday;
  28. }
  29. public void setBirthday(Date birthday) {
  30. this.birthday = birthday;
  31. }
  32. public String getEmail() {
  33. return email;
  34. }
  35. public void setEmail(String email) {
  36. this.email = email;
  37. }
  38. }
  39. import java.io.IOException;
  40. import java.text.ParseException;
  41. import java.text.SimpleDateFormat;
  42. import com.fasterxml.jackson.databind.ObjectMapper;
  43. public class JacksonDemo {
  44. public static void main(String[] args) throws ParseException, IOException {
  45. User user = new User();
  46. user.setName("小民");
  47. user.setEmail("xiaomin@sina.com");
  48. user.setAge(20);
  49. SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
  50. user.setBirthday(dateformat.parse("1996-10-01"));
  51. ObjectMapper mapper = new ObjectMapper();
  52. String json = mapper.writeValueAsString(user);
  53. System.out.println(json);
  54. //输出结果:{"name":"小民","birthday":"1996年09月30日","mail":"xiaomin@sina.com"}
  55. }
  56. }
  57. 转自 : http://blog.csdn.net/accountwcx/article/details/24585987

Java下利用Jackson进行JSON解析和序列化的更多相关文章

  1. 【转载】Java下利用Jackson进行JSON解析和序列化

    参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...

  2. Java下利用Jackson进行JSON解析和序列化1

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  3. Java下用Jackson进行JSON序列化和反序列化(转)

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  4. Spring学习---Spring中利用jackson进行JSON转换

    Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...

  5. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  6. 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化

    Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...

  7. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  8. JSON解析与序列化

    JSON之所以流行,拥有与JavaScript类似的语法并不是全部原因.更重要的一个原因是,可以把JSON数据结构解析为有用的 JavaScript对象.与XML数据结构要解析成DOM文档而且从中提取 ...

  9. 接口测试——Java + TestNG 国家气象局接口(json解析)实例

    后端测试,主要以测试接口为主.需要代码支撑,近期便找了个天气接口捣鼓了. 使用到的工具是:Eclipse + TestNG + Maven + ReportNG,全国城市编码:http://www.c ...

随机推荐

  1. Python多进程(1)——subprocess与Popen()

    Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...

  2. hdu 1113 Word Amalgamation 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113 题意:输入一个字典,然后再输入若干单词(每行中,1 <= 单词数 <= 100,并且 ...

  3. ipconfig 无效

    刚刚配置了很多的环境变量后,在命令行下输入ipconfig后无效了 于是在环境变量PATH底下再次加入了;C:\WINDOWS\system32; 从新运行ipconfig,问题解决

  4. 配置无线网络的时候会提示“Enter Password for Default Keyring to Unlock”

    密钥管理软件Seahorse有关,这个时候我们打开c配置一下就可以解决. 命令行下运行seahorse或依次点击菜单“应用程序→附件→密码和加密密钥”, 在login一行中右键选择更改密码,然后什么都 ...

  5. 百度编辑器 ueditor .net开发

    ueditor1.4.3 下载地址:http://pan.baidu.com/s/1bnCQVtd   <!--editor--> <script type="text/j ...

  6. PHP CI框架学习笔记-分页实现程序

    视图html  <div id="body"> <form action="/index.php/search/index/" method= ...

  7. Z-XML团队 软件工程课之我感我思我收获

    <软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末. 走的远了,也该回头看看.全员7人回顾 ...

  8. arcgis android 通过getExtent得到当前地图范围四个点的坐标

    困扰了我很久的问题终于要得到解决了,先欢喜一下.我的目的是想做一个当程序完全退出后,再次打开程序地图直接显示上次程序退出前地图的范围.arcgis for android官方软件就有这个功能.网上搜索 ...

  9. 【转】kylin优化

    转自: http://www.bitstech.net/2016/01/04/kylin-olap/ http://www.csdn.net/article/2015-11-27/2826343 ht ...

  10. 如何修改HDFS的备份数

    我这个是看别人发的,记录一下,解决办法如下: