代码无真相,为了最简单的说明,我直接上代码。

public class User {

private String name;

private Gender gender;

private List<Account> accounts;

省略get和set方法

...

}

public enum Gender {

MALE,

FEMALE

}

public class Account {

private Integer id;

private String cardId;

private BigDecimal balance;

 private Date date;

省略get和set方法

...

}

public static void main(String[] args) throws Exception {

User user = new User();

user.setName("菠萝大象");

user.setGender(Gender.MALE);

List<Account> accounts = new ArrayList<Account>();

Account account = new Account();

account.setId(1);

account.setBalance(BigDecimal.valueOf(1900.2));

account.setCardId("423335533434");

account.setDate(new Date());

accounts.add(account);

account = new Account();

account.setId(2);

account.setBalance(BigDecimal.valueOf(5000));

account.setCardId("625444548433");

account.setDate(new Date());

accounts.add(account);

user.setAccounts(accounts);

ObjectMapper mapper = new ObjectMapper();

mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);

String json = mapper.writeValueAsString(user);

System.out.println("Java2Json: "+json);

user = mapper.readValue(json, User.class);

System.out.println("Json2Java: "+mapper.writeValueAsString(user));

}

mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);这是辅助设置,控制格式化输出。     之前使用的mapper.getSerializationConfig().setXxx方法现在很多都已经被标注为@Deprecated了,因此请大家使用上面的方式处理。     SerializationConfig.Feature枚举里面还有很多其它的设置项,比如日期,比如要不要输出null值等等。其它的还有:         org.codehaus.jackson.JsonGenerator.Feature.*          org.codehaus.jackson.JsonParser.Feature.*     让我们来看看输出

Java2Json:{
"name" : "菠萝大象",
"gender" : "MALE",
"accounts" : [ {
"id" : 1,
"cardId" : "423335533434",
"balance" : 1900.2,
"date" : 1397542291453
}, {
"id" : 1,
"cardId" : "625444548433",
"balance" : 5000,
"date" : 1397542291453
} ]
} Json2Java:{
"name" : "菠萝大象",
"gender" : "MALE",
"accounts" : [ {
"id" : 1,
"cardId" : "423335533434",
"balance" : 1900.2,
"date" : 1397542291453
}, {
"id" : 1,
"cardId" : "625444548433",
"balance" : 5000,
"date" : 1397542291453
} ]
}

结果,两次转换之后,打印出来的字符串应该是一样的:          OK,果然结果是一致的,大家现在应该会使用jackson进行Java与Json的互相转换了吧?恩,现在再考虑一种情况,如果想将List<User>的JSON字符串反转为泛型,应该怎么做呢?     想这样:mapper.readValue(json, List<User>.class)?这可是错误的,这里的参数是Class<T> valueType,valueType是Class<T>类的对象。如上面所示User.class 就是Class<User>类的对象。因此要想获得泛型的集合类型需要通过其它办法:

/**  
* 获取泛型的Collection Type  
@param jsonStr json字符串  
@param collectionClass 泛型的Collection  
@param elementClasses 元素类型  
*/
public static <T> T readJson(String jsonStr, Class<?> collectionClass, Class<?>... elementClasses) throws Exception {

ObjectMapper mapper = new ObjectMapper();

JavaType javaType = mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);

return mapper.readValue(jsonStr, javaType);

}

定义一个List<User>,向里面添加两次user,先调用writeValueAsString方法打印出json,再调用readJson方法,这不仅可以转换泛型List<T>,还可以用于其它集合,比如Map<K,V>等等。

List<User> list = readJson(json, List.class, User.class);

ObjectMapper可以让对象与JSON之间相互转换,除此之外Jackson还提供了JsonGenerator 和 JsonParser 这两个类,它们可以更细粒度化。调用ObjectMapper的writeValueAsString和readValue方法, 最终还是会交给JsonGenerator 和JsonParser 去处理,对此还有疑惑的话,可以去看看这两个方法的的处理序列化与反序列源码。

jackson 进行json与java对象转换 之一的更多相关文章

  1. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  2. jackson 进行json与java对象转换 之二

    主要用于测试学习用jackson包实现json.对象.Map之间的转换. 1.准备测试用的Java类 (1)Link类 package test; /** * Description: 联系方式,被u ...

  3. jackson 进行json与java对象转换 之四

    jackson简单使用,对象转json,json转对象,json转list   POJO序列化为json字符串: 准备一个POJO: @JsonIgnoreProperties(ignoreUnkno ...

  4. FastJson、Jackson、Gson进行Java对象转换Json细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  5. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  6. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  7. Java对象转换成xml对象和Java对象转换成JSON对象

    1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...

  8. JAVA对象转换JSON

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...

  9. JSON与Java对象的互相转换

    JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do") @ResponseBody public JSONObject ...

随机推荐

  1. EXTJS4.2 级联 下拉

    items: [ { xtype: "fieldcontainer", layout: "hbox", items: [{ xtype: 'combo', na ...

  2. Groovy 配置环境变量

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70313790 本文出自[赵彦军的博客] 概念 Groovy 配置环境变量 开发工具 ...

  3. linux防火墙开关

    对于普通Linux机器开关防火墙命令: 1重启后生效 chkconfig iptables off chkconfig iptables on 2即时生效 serivce iptables statu ...

  4. python3 使用pymysql

    #! /usr/bin/env python3 # coding = utf-8 import random import pymysql # 连接数据库函数 def connDB(data): co ...

  5. 目标检测 — NMS

    1.非极大值抑制步骤 非极大值抑制算法(Non-maximum suppression,NMS)在目标检测中经常用到.我们的检测算法可能对同一目标产生多次检测的结果,非极大值抑制算法可以保证每个目标只 ...

  6. HANA 存储过程

    You can develop secure procedures using SQLScript in SAP HANA by observing the following recommendat ...

  7. 64位Navicat Premium安装/破解【含资源】

    开门见山: 1/先安装Navicat Primium,双击Navicat Primium——trial_64.exe(64位) 2/安装好打开Navicat Primium,提示使用或注册时,双击Pa ...

  8. HTML实用案例(1)—— 左侧菜单,右侧内容的布局(带左侧菜单点击隐藏显示效果)

    效果图 代码部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  9. Oracle hash分区的秘密

    转自:http://www.hellodb.net/2009/12/hash_partition.html 在面试时经常会问一个问题,请列举出hash在数据库内部的应用,hash的原理虽然简单,但是它 ...

  10. 算法之python创建链表实现cache

    算法之python创建链表实现cache 本节内容 问题由来 解决思路 实现代码 总结 1. 问题由来 问题起因于朋友的一次面试题,面试公司直接给出两道题,要求四十八小时之内做出来,语言不限,做出来之 ...