利用Jackson进行JSON序列化和解析

简介:

对于JSON,大家常用的就是Gson、JackSon、FastSon,那么今天先来介绍利用JackSon进行JSON的序列化和解析。

首先,IDE我选择使用IDEA,那么自然也会使用MAVEN来管理依赖,一下是pox.xml的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         < dependency >
       < groupId >com.fasterxml.jackson.core</ groupId >
       < artifactId >jackson-core</ artifactId >
       < version >2.6.3</ version >
     </ dependency >
     < dependency >
       < groupId >com.fasterxml.jackson.core</ groupId >
       < artifactId >jackson-annotations</ artifactId >
       < version >2.6.3</ version >
     </ dependency >
     < dependency >
       < groupId >com.fasterxml.jackson.core</ groupId >
       < artifactId >jackson-databind</ artifactId >
       < version >2.6.3</ version >
     </ dependency >

一、首先使用不带注解的方式:

1、创建User类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package  info.tshare.jacksondemo;
  
import  java.util.Date;
  
/**
  * Created with IntelliJ IDEA.
  * User: Tshare
  * Date: 2015-11-24
  * Time: 9:26
  * JSON序列化和反序列化使用的User类
  */
public  class  User {
     private  String name;
     private  Integer age;
     private  Date birthday;
     private  String email;
  
     public  String getName() {
         return  name;
     }
  
     public  void  setName(String name) {
         this .name = name;
     }
  
     public  Integer getAge() {
         return  age;
     }
  
     public  void  setAge(Integer age) {
         this .age = age;
     }
  
     public  Date getBirthday() {
         return  birthday;
     }
  
     public  void  setBirthday(Date birthday) {
         this .birthday = birthday;
     }
  
     public  String getEmail() {
         return  email;
     }
  
     public  void  setEmail(String email) {
         this .email = email;
     }
}

2、创建测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package  info.tshare.jacksondemo;
  
import  com.fasterxml.jackson.core.JsonProcessingException;
import  com.fasterxml.jackson.databind.ObjectMapper;
  
import  java.io.IOException;
import  java.text.ParseException;
import  java.text.SimpleDateFormat;
import  java.util.List;
import  java.util.ArrayList;
  
/**
  * Created with IntelliJ IDEA.
  * User: Tshare
  * Date: 2015-11-24
  * Time: 9:28
  */
public  class  JacksonDemo {
     public  static  void  main(String[] args)  throws  ParseException, IOException {
         User user =  new  User();
         user.setName( "Tshare" );
         user.setEmail( "tshareinfo@gmail.com" );
         user.setAge( 24 );
  
         SimpleDateFormat dateFormat =  new  SimpleDateFormat( "yyyy-MM-dd" );
         user.setBirthday(dateFormat.parse( "1991-01-01" ));
  
         /**
          * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
          * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
          * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
          * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
          * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
          * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
          */
         ObjectMapper mapper =  new  ObjectMapper();
  
         /**
          * User类转JSON
          * 输出结果{"name":"Tshare","age":24,"birthday":662659200000,"email":"tshareinfo@gmail.com"}
          */
         String json = mapper.writeValueAsString(user);
         System.out.println(json);
  
         /**
          * Java集合转Json
          * 输出结果[{"name":"Tshare","age":24,"birthday":662659200000,"email":"tshareinfo@gmail.com"}]
          */
         List<User> users =  new  ArrayList<User>();
         users.add(user);
         String jsonlist = mapper.writeValueAsString(users);
         System.out.println(jsonlist);
  
  
         String jsonstr =  "{\"name\":\"Tshare\",\"age\":24,\"birthday\":662659200000,\"email\":\"tshareinfo@gmail.com\"}" ;
         /**
          * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
          */
         User userJson = mapper.readValue(jsonstr,User. class );
         System.out.println(userJson);
     }
}

二、测试使用注解的方式:

1、创建User类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package  info.tshare.jacksondemo;
  
import  com.fasterxml.jackson.annotation.JsonFormat;
import  com.fasterxml.jackson.annotation.JsonIgnore;
import  com.fasterxml.jackson.annotation.JsonProperty;
  
import  java.util.Date;
  
/**
  * Created with IntelliJ IDEA.
  * User: Tshare
  * Date: 2015-11-24
  * Time: 9:26
  * JSON序列化和反序列化使用的User类
  */
public  class  User {
     private  String name;
     @JsonIgnore    //不JSON序列化年龄
     private  Integer age;
     @JsonFormat (pattern =  "yyyy年MM月dd日" )   //格式化日期属性
     private  Date birthday;
     @JsonProperty ( "mail" )    //序列化email属性为mail
     private  String email;
  
     public  String getName() {
         return  name;
     }
  
     public  void  setName(String name) {
         this .name = name;
     }
  
     public  Integer getAge() {
         return  age;
     }
  
     public  void  setAge(Integer age) {
         this .age = age;
     }
  
     public  Date getBirthday() {
         return  birthday;
     }
  
     public  void  setBirthday(Date birthday) {
         this .birthday = birthday;
     }
  
     public  String getEmail() {
         return  email;
     }
  
     public  void  setEmail(String email) {
         this .email = email;
     }
}

2、创建测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package  info.tshare.jacksondemo;
  
import  com.fasterxml.jackson.core.JsonProcessingException;
import  com.fasterxml.jackson.databind.ObjectMapper;
  
import  java.io.IOException;
import  java.text.ParseException;
import  java.text.SimpleDateFormat;
import  java.util.List;
import  java.util.ArrayList;
  
/**
  * Created with IntelliJ IDEA.
  * User: Tshare
  * Date: 2015-11-24
  * Time: 9:28
  */
public  class  JacksonDemo {
     public  static  void  main(String[] args)  throws  ParseException, JsonProcessingException {
         User user =  new  User();
         user.setName( "Tshare" );
         user.setEmail( "tshareinfo@gmail.com" );
         user.setAge( 24 );
  
         SimpleDateFormat dateFormat =  new  SimpleDateFormat( "yyyy-MM-dd" );
         user.setBirthday(dateFormat.parse( "1991-01-01" ));
  
         ObjectMapper mapper =  new  ObjectMapper();
         String json = mapper.writeValueAsString(user);
         System.out.println(json);
     }
}

执行结果:

{"name":"Tshare","birthday":"1990年12月31日","mail":"tshareinfo@gmail.com"}

https://blog.liyang.io/25.html



本文转自 stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1943336

相关文章
|
10月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
12月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
11月前
|
JSON 算法 API
淘宝商品评论API接口核心解析,json数据返回
淘宝商品评论API是淘宝开放平台提供的数据服务接口,允许开发者通过编程方式获取指定商品的用户评价数据,包括文字、图片、视频评论及评分等。其核心价值在于:
|
9月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
489 3
|
9月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
427 1
|
9月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
393 1
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
343 67
|
10月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
607 3
|
9月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
1249 0
|
10月前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。

推荐镜像

更多
  • DNS