现在很多公司的项目都基于SOA架构,系统间的调用有许多方式,其中一种常见的是用HTTP协议、以JSON格式返回结果。

这使得JSON的使用更加普遍。而市面上处理JSON的框架五花八门,常见的有JSONObject、GSON、Jackson等。

现在我们来学习Jackson,及记录常用的一些例子

版本说明

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.4</version>
</dependency>
</dependencies>

最简单的例子

将Bean对象转换为JSON,在还原回来。(为了得到指定格式的日期格式,我指定了日期格式)

package com.nicchagil.demo.No001最简单的例子;

import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; public class Call { @Test
public void writeJson() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:SS")); String json = objectMapper.writeValueAsString(new User(999, "Nick Huang", new Timestamp(Calendar.getInstance().getTimeInMillis())));
System.out.println(json);
} @Test
public void readJson() throws IOException {
String json = "{\"id\":999,\"name\":\"Nick Huang\",\"birthday\":\"2015-10-21 15:45:673\"}"; ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:SS")); User user = objectMapper.readValue(json, User.class);
System.out.println(user);
} }

还需要一个Bean类型

package com.nicchagil.demo.No001最简单的例子;

import java.sql.Timestamp;

public class User {

    private Integer id;
private String name;
private Timestamp birthday; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Timestamp getBirthday() {
return birthday;
} public void setBirthday(Timestamp birthday) {
this.birthday = birthday;
} public User(Integer id, String name, Timestamp birthday) {
super();
this.id = id;
this.name = name;
this.birthday = birthday;
} public User() {
super();
} @Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("User [id=").append(id).append(", name=").append(name)
.append(", birthday=").append(birthday).append("]");
return builder.toString();
} }

日志如下

{"id":999,"name":"Nick Huang","birthday":"2015-10-22 17:34:318"}
User [id=999, name=Nick Huang, birthday=2015-10-21 15:45:00.673]

有泛型、集合的情况,如何指定转换的结构

package com.nicchagil.demo.No002含泛型和集合;

import java.io.IOException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; public class Call { @Test
public void writeJson() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> map = new HashMap<String, Object>();
map.put("Nick", new User(999, "Nick Huang", new Timestamp(Calendar.getInstance().getTimeInMillis())));
map.put("Robbin", new User(998, "Robbin", new Timestamp(Calendar.getInstance().getTimeInMillis()))); String json = objectMapper.writeValueAsString(map);
System.out.println(json);
} @Test
public void readJson() throws IOException {
String json = "{\"Robbin\":{\"id\":998,\"name\":\"Robbin\",\"birthday\":1445415635096},\"Nick\":{\"id\":999,\"name\":\"Nick Huang\",\"birthday\":1445415635096}}"; ObjectMapper objectMapper = new ObjectMapper(); Map<String, User> map = objectMapper.readValue(json, new TypeReference<Map<String, User>>() {});
System.out.println(map);
} }

日志如下

{"Robbin":{"id":998,"name":"Robbin","birthday":1445506610097},"Nick":{"id":999,"name":"Nick Huang","birthday":1445506610097}}
{Robbin=User [id=998, name=Robbin, birthday=2015-10-21 16:20:35.096], Nick=User [id=999, name=Nick Huang, birthday=2015-10-21 16:20:35.096]}

更复杂的结构呢

比如Map里面的不同key值对应的类型不同(我这个只是土方法,有好方法的童靴提示下哦)(>_<)

package com.nicchagil.demo.No003复杂结构;

import java.io.IOException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nicchagil.demo.No001最简单的例子.User; public class Call { @Test
public void writeJson() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> map = new HashMap<String, Object>();
map.put("code", "success");
map.put("data", new User(999, "Nick Huang", new Timestamp(Calendar.getInstance().getTimeInMillis()))); String json = objectMapper.writeValueAsString(map);
System.out.println(json);
} @Test
public void readJson() throws IOException {
String json = "{\"data\":{\"id\":999,\"name\":\"Nick Huang\",\"birthday\":1445502596155},\"code\":\"success\"}"; ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> map = objectMapper.readValue(json, Map.class);
Object data = map.get("data");
User user = objectMapper.convertValue(data, User.class);
map.put("data", user); System.out.println(map); /* 打印出类型 */
System.out.println("code's type : " + map.get("code").getClass().toString());
System.out.println("data's type : " + map.get("data").getClass().toString());
} }

日志如下

{"data":{"id":999,"name":"Nick Huang","birthday":1445506936594},"code":"success"}
{data=User [id=999, name=Nick Huang, birthday=2015-10-22 16:29:56.155], code=success}
code's type : class java.lang.String
data's type : class com.nicchagil.demo.No001最简单的例子.User

简单的工具类

import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; public class JSONUtil { /* 公共的ObjectMapper */
private static ObjectMapper commonObjectMapper = new ObjectMapper(); static {
commonObjectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
} /**
* 转JSON
*/
public static String toJSON(Object obj) {
String json = null;
try {
json = commonObjectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException("Bean->JSON转换失败");
}
return json;
} /**
* 转Bean
*/
public static <T> T toBean(String json, TypeReference<T> valueTypeRef) {
T t = null;
try {
t = commonObjectMapper.readValue(json, valueTypeRef);
} catch (IOException e) {
throw new RuntimeException("JSON->Bean转换失败");
}
return t;
} @Test
public void toJSONTest() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "123");
map.put("name", "Nick Huang");
map.put("createTime", new Date());
map.put("updateTime", new Timestamp(new Date().getTime()));
map.put("sendTime", Calendar.getInstance()); System.out.println(JSONUtil.toJSON(map));
} @Test
public void toBeanTest() {
System.out.println(JSONUtil.toBean("{\"createTime\":\"2017-07-26 10:09:58\",\"name\":\"Nick Huang\",\"updateTime\":\"2017-07-26 10:09:58\",\"id\":\"123\",\"sendTime\":\"2017-07-26 10:09:58\"}",
new TypeReference<Map<String, Object>>() {}));
} }

【JSON】Jackson初学,及常用的例子的更多相关文章

  1. Json --- Jackson工具

    一.Jackson简介 Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象.Jackson ...

  2. MVC5中后台提供Json,前台处理Json,绑定给Dropdownlist的例子

    MVC5中后台提供Json,前台处理Json,绑定给Dropdownlist的例子: 前端: 我们以前在前端定义了两个控件: <div class="row"> < ...

  3. sqlalchemy 转json 的几种常用方式

    sqlalchemy 转json 的几种常用方式 # -*- coding:utf-8 -*- import datetime from flask import Flask, json, jsoni ...

  4. 用Jackson进行Json序列化时的常用注解

    Jackson时spring boot默认使用的json格式化的包,它的几个常用注解: @JsonIgnore 用在属性上面,在序列化和反序列化时都自动忽略掉该属性 @JsonProperty(&qu ...

  5. spray json, jackson 转到type时多key和少key的比较

    有组合关系的三个class定义 A { B { C {...} ... } ... } 每个class都有loadFromJson和writeAsJson方法.过去几年,三个class里的成员变量一直 ...

  6. 【JSON 注解】JSON循环引用1-----Jackson常用注解介绍 eq:@JsonIgnore

    循环引用:实体A与实体B有关系,A中有B作为字段,B中有A作为一个字段.查询A对象后,将A对象转化为JSON格式数据时,会因为序列化过程中导致A中有B字段,B字段中又有A,这样就引起了循环引用的问题! ...

  7. json jackson

    1.引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId&g ...

  8. linux初学 :linux 常用命令(二)

    压缩和解压命令 gzip/guzip   zip/unzip   tar gzip和gunzip一般可用参数是-r,例: gzip test.txt 压缩文件 gzip -r test 压缩所有tes ...

  9. json数据与字符串相互转化的例子

    json与字符串之间的转换,本文分享一个小例子.   json转成string[需要引用json2.js文件]:  var arr=[{id:'id',name:'Spring'},{id:'id2' ...

随机推荐

  1. url组成部分

    协议  eg:http 主机IP地址  eg :端口号8080 项目资源地址  eg:目录名,文件夹名

  2. Java泛型01--任意数组中两元素交换

    package com.zl.generic; /** * 交换“任意”数组 中两个元素 */ public class GenericSwapArray { public static void m ...

  3. DataTable 筛选数据

    //使用聚合函数 max ,sum  ,count .... private void ComputeBySalesSalesID(DataSet dataSet) {     // Presumes ...

  4. 整理的java的日期DateUtil

    package cn.knet.data.untils; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...

  5. SIFT算法详解(转)

    http://blog.csdn.net/zddblog/article/details/7521424 目录(?)[-] 尺度不变特征变换匹配算法详解 Scale Invariant Feature ...

  6. Android应用开发中的风格和主题(style,themes)

    http://www.cnblogs.com/playing/archive/2011/04/01/2002469.html 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验, ...

  7. [php] 处理图像

    <?php /* 处理图像 */ /* {php5} 动态图像的处理更容易. 在 php.ini中就包含了GD扩展包, 去掉 其中的注释即可. extension=php_gd2.dll 其中 ...

  8. python使用装饰器捕获异常

    可以编写一个通用的捕获异常的装饰器, 当程序发生异常时可以继续执行后续动作. 尤其适合于使用大量断言的验证性程序. 装饰器的实现原理使用了回调技术. 如下所示, robust 是一个装饰器. 当在普通 ...

  9. linux设备驱动归纳总结(八):1.总线、设备和驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-109733.html linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxx ...

  10. 【python cookbook】【数据结构与算法】11.对切片命名

    问题:如何清理掉到处都是硬编码的切片索引 解决方案:对切片命名 假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结 ...