Jackson框架:Java对象与json、xml格式的数据之间的转换
来源:互联网 发布:淘宝网牛仔女装 编辑:程序博客网 时间:2024/05/19 17:24
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson、JSON-lib、Jackson等等。本文主要介绍Jackson的使用,Jackson除了能实现Java对象与Json串的互转外,还能將Java对象转换为Xml格式,使用较为简单而且据说效率比较高。
对于Jackson的jar包我们可以从maven资源库中下载:http://mvnrepository.com/
所需要的jar包:
前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。
一、准备工作
1.下载依赖库jar包(jackson-all-1.6.2.jar)
然后在工程中导入这个jar包即可开始工作
官方示例:http://wiki.fasterxml.com/JacksonInFiveMinutes
如果你需要转换xml,那么还需要stax2-api.jar
2.测试类基本代码如下:
package cn.keymobile;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.fasterxml.jackson.core.JsonEncoding;import com.fasterxml.jackson.core.JsonGenerationException;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParseException;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.node.JsonNodeFactory;import com.fasterxml.jackson.dataformat.xml.XmlMapper;/** * 将Java对象转换成json字符串,也可以将json字符串转换成Java对象 * @author zhaojd * */public class JacksonTest { private JsonGenerator jsonGenerator = null; private ObjectMapper objectMapper = null; private AccountBean bean = null; @SuppressWarnings("deprecation") @Before public void init() { bean = new AccountBean(); bean.setAddress("china-Guangzhou"); bean.setEmail("mr_zhaojd@163.com"); bean.setId(1); bean.setName("zhaojd"); objectMapper = new ObjectMapper(); try { jsonGenerator = objectMapper.getJsonFactory() .createJsonGenerator(System.out, JsonEncoding.UTF8); } catch (IOException e) { e.printStackTrace(); } } @After public void destory() { try { if (jsonGenerator != null) { jsonGenerator.flush(); } if (!jsonGenerator.isClosed()) { jsonGenerator.close(); } jsonGenerator = null; objectMapper = null; bean = null; System.gc(); } catch (IOException e) { e.printStackTrace(); } } /** * 1.1 java对象转换成json */ @Test public void javaBeanToJson() throws Exception { try { System.out.println("jsonGenerator"); /** * writeObject()可以转换Java对象;例如:JavaBean/Map/List/Array等 */ jsonGenerator.writeObject(bean); System.out.println(); System.out.println("ObjectMapper"); /** * writeValue() 和 writeObject() 是相同的功能 */ objectMapper.writeValue(System.out, bean); } catch (IOException e) { e.printStackTrace(); } } /** * 所谓的json格式: * {"键":"值","键":"值","键":"值"} * jsonGenerator * {"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null} * ObjectMapper * {"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null} */ /** * 1.2 将Map集合转换成json字符串 * @throws Exception */ @Test public void mapToJson() throws Exception { try { Map<String, Object> map = new HashMap<String, Object>(); map.put("name", bean.getName()); map.put("account", bean); bean = new AccountBean(); bean.setAddress("china-Lanzhou"); bean.setEmail("zhaojd@qq.com"); map.put("account2", bean); System.out.println("jsonGenerator"); jsonGenerator.writeObject(map); System.out.println(""); System.out.println("objectMapper"); objectMapper.writeValue(System.out, map); } catch (IOException e) { e.printStackTrace(); } } /** * jsonGenerator * { * "account2":{"address":"china-Lanzhou","name":null,"id":0,"email":"zhaojd@qq.com","birthday":null}, * "name":"zhaojd", * "account":{"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null} * } * objectMapper * { * "account2":{"address":"china-Lanzhou","name":null,"id":0,"email":"zhaojd@qq.com","birthday":null}, * "name":"zhaojd"," * account":{"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null} * } */ /** * 1.3 将List转换成json */ @Test public void listToJson() throws Exception { try { List<AccountBean> list = new ArrayList<AccountBean>(); list.add(bean); bean = new AccountBean(); bean.setId(2); bean.setAddress("address2"); bean.setEmail("email2"); bean.setName("name2"); list.add(bean); System.out.println("jsonGenerator"); jsonGenerator.writeObject(list); System.out.println(); System.out.println("ObjectMapper"); /** * 用objectMapper直接返回list转换成的JSON字符串 */ System.out.println("直接返回list转换成的json" + objectMapper.writeValueAsString(list)); //objectMapper list转换成JSON字符串 objectMapper.writeValue(System.out, list); } catch (IOException e) { e.printStackTrace(); } } /** * jsonGenerator * [ * {"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null}, * {"address":"address2","name":"name2","id":2,"email":"email2","birthday":null} * ] * ObjectMapper * 直接返回list转换成的json[ * {"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null}, * {"address":"address2","name":"name2","id":2,"email":"email2","birthday":null} * ] * [ * {"address":"china-Guangzhou","name":"zhaojd","id":1,"email":"mr_zhaojd@163.com","birthday":null}, * {"address":"address2","name":"name2","id":2,"email":"email2","birthday":null} * ] */ /** * 1.4 下面来看看jackson提供的一些类型,用这些类型完成json转换;如果你使用这些类型转换JSON的话, * 那么你即使没有JavaBean(Entity)也可以完成复杂的Java类型的JSON转换。 * 下面用到这些类型构建一个复杂的Java对象,并完成JSON转换。 */ @Test public void othersToJson() throws Exception { try { String[] arr = {"a", "b", "c"}; System.out.println("jsonGenerator"); String str = "hello world jackson!"; //byte jsonGenerator.writeBinary(str.getBytes()); //boolean jsonGenerator.writeBoolean(true); //null jsonGenerator.writeNull(); //float jsonGenerator.writeNumber(2.2f); //char jsonGenerator.writeRaw("c"); //String jsonGenerator.writeRaw(str, 5, 10); //String jsonGenerator.writeRawValue(str, 5, 5); //String jsonGenerator.writeString(str); jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str)); System.out.println(); //Object jsonGenerator.writeStartObject();//{ jsonGenerator.writeObjectFieldStart("user");//user:{ jsonGenerator.writeStringField("name", "jackson");//name:jackson jsonGenerator.writeBooleanField("sex", true);//sex:true jsonGenerator.writeNumberField("age", 22);//age:22 jsonGenerator.writeEndObject();//} jsonGenerator.writeArrayFieldStart("infos");//infos:[ jsonGenerator.writeNumber(22);//22 jsonGenerator.writeString("this is array");//this is array jsonGenerator.writeEndArray();//] jsonGenerator.writeEndObject();//} AccountBean bean = new AccountBean(); bean.setAddress("address"); bean.setEmail("email"); bean.setId(1); bean.setName("haha"); //complex Object jsonGenerator.writeStartObject();//{ jsonGenerator.writeObjectField("user", bean);//user:{bean} jsonGenerator.writeObjectField("infos", arr);//infos:[array] jsonGenerator.writeEndObject();//} } catch (Exception e) { e.printStackTrace(); } } /** * jsonGenerator * "aGVsbG8gd29ybGQgamFja3NvbiE=" true null 2.2c world jac worl "hello world jackson!" "hello world jackson!" * {"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]} * {"user":{"address":"address","name":"haha","id":1,"email":"email","birthday":null},"infos":["a","b","c"]} */ /** * 2.1 将json字符串转换成JavaBean对象 */ @Test public void jsonToJavaBean() throws Exception { String json = "{\"name\":\"zhaojd\",\"email\":\"email\",\"address\":\"address\"}"; try { AccountBean acc = objectMapper.readValue(json, AccountBean.class); System.out.println(acc.getName()); System.out.println(acc); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * zhaojd * 0#zhaojd#email#address#null */ /** * 2.2 将json 转换成List */ @SuppressWarnings("unchecked") @Test public void jsonToList() { String json = "[{\"address\": \"address2\",\"name\":\"zhaojd\",\"id\":2,\"email\":\"email2\"}," + "{\"address\":\"address\",\"name\":\"zhaojd\",\"id\":1,\"email\":\"email\"}]"; try { List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json, List.class); System.out.println("list的长度:" + list.size()); for (int i = 0; i < list.size(); i++) { Map<String, Object> map = list.get(i); Set<String> set = map.keySet(); for (Iterator<String> it = set.iterator(); it.hasNext();) { String key = it.next(); System.out.println(key + ":" + map.get(key)); } } } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * list的长度:2 * address:address2 * name:zhaojd * id:2 * email:email2 * address:address * name:zhaojd * id:1 * email:email */ /** * 2.3 json字符串转换成Array */ @Test public void jsonToArray() throws Exception { String json = "[{\"address\": \"address2\",\"name\":\"zhaojd2\",\"id\":2,\"email\":\"email2\"}," + "{\"address\":\"address\",\"name\":\"zhaojd\",\"id\":1,\"email\":\"email\"}]"; try { AccountBean[] arr = objectMapper.readValue(json, AccountBean[].class); System.out.println("数组的长度为:" + arr.length); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 数组的长度为:2 * 2#zhaojd2#email2#address2#null * 1#zhaojd#email#address#null */ /** * 2.4 json转换成Map集合 */ @SuppressWarnings("unchecked") @Test public void jsonToMap() throws Exception { String json = "{\"success\":true,\"A\":{\"address\": \"address2\",\"name\":\"zhaojd2\",\"id\":2,\"email\":\"email2\"}," + "\"B\":{\"address\":\"address\",\"name\":\"zhaojd\",\"id\":1,\"email\":\"email\"}}"; try { Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class); System.out.println("map集合的长度为:" + maps.size()); Set<String> key = maps.keySet(); Iterator<String> iter = key.iterator(); while (iter.hasNext()) { String field = iter.next(); System.out.println(field + ":" + maps.get(field)); } } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /* * map集合的长度为:3 * success:true * A:{address=address2, name=zhaojd2, id=2, email=email2} * B:{address=address, name=zhaojd, id=1, email=email} */ /** * 3. jackson对xml的支持 */ @Test public void objectToXml() throws Exception { System.out.println("XmlMapper"); XmlMapper xml = new XmlMapper(); try { /** * javaBean转换成xml */ AccountBean account = new AccountBean(); Birthday birthday = new Birthday("1992-08"); account.setAddress("广州"); account.setBirthday(birthday); account.setEmail("mr_zhaojd"); account.setId(1); account.setName("zhaojd"); String xmlStr = xml.writeValueAsString(account); System.out.println(xmlStr); /** * List转换成xml */ List<AccountBean> list = new ArrayList<AccountBean>(); list.add(account); list.add(account); System.out.println(xml.writeValueAsString(list)); /** * Map转换xml文档 */ Map<String, AccountBean> map = new HashMap<String, AccountBean>(); map.put("A", account); map.put("B", account); System.out.println(xml.writeValueAsString(map)); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * XmlMapper <AccountBean xmlns=""> <id>1</id> <name>zhaojd</name> <email>mr_zhaojd</email> <address>广州</address> <birthday><birthday>1992-08</birthday></birthday> </AccountBean> <ArrayList xmlns=""> <id>1</id> <name>zhaojd</name> <email>mr_zhaojd</email> <address>广州</address> <birthday><birthday>1992-08</birthday></birthday> </ArrayList> <zdef532234490:ArrayList xmlns:zdef532234490=""> <zdef532234490:id>1</zdef532234490:id> <zdef532234490:name>zhaojd</zdef532234490:name> <zdef532234490:email>mr_zhaojd</zdef532234490:email> <zdef532234490:address>广州</zdef532234490:address> <zdef532234490:birthday><zdef532234490:birthday>1992-08</zdef532234490:birthday></zdef532234490:birthday> </zdef532234490:ArrayList> <HashMap xmlns=""> <A> <id>1</id> <name>zhaojd</name> <email>mr_zhaojd</email> <address>广州</address> <birthday><birthday>1992-08</birthday></birthday> </A> <B> <id>1</id> <name>zhaojd</name> <email>mr_zhaojd</email> <address>广州</address> <birthday><birthday>1992-08</birthday></birthday> </B> </HashMap> */ @Test public void xmlToObject() { XmlMapper xmlMapper = new XmlMapper(); String xml = "<AccountBean><id>1</id><name>zhaojd</name><email>mr_zhaojd</email><address>广州</address><birthday><birthday>1992-08</birthday></birthday></AccountBean>"; try { AccountBean ab = xmlMapper.readValue(xml,AccountBean.class); System.out.println(ab); } catch (IOException e) { e.printStackTrace(); } } /** * 1#zhaojd#mr_zhaojd#广州#1992-08 */}
参考原文出处:
http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html
http://blog.csdn.net/Rongbo_J/article/details/47986121
0 0
- Jackson框架:Java对象与json、xml格式的数据之间的转换
- 使用Jackson做对象与json之间的相互转换
- Json格式与java对象之间的转换
- Jackson 框架,JSON和java对象的互相转换
- java对象与xml格式之间的转换
- Jackson 框架,转换java对象、xml、json更容易
- Jackson框架,实现Java对象/Json/XML相互转换
- jackson 与复杂对象的json转换
- [JSON-lib框架]使java对象、json、xml之间的转换不再困难
- [JSON-lib框架]使java对象、json、xml之间的转换不再困难
- JackSon 数据之间的转换 java
- JackSon 数据之间的转换 java
- JSON 与JAVA对象之间的转换
- JSON 与JAVA对象之间的转换
- java对象与json之间的转换
- 用jackson包实现json、对象、Map之间的转换
- 使用Jackson转换java对象为Json数据时,Json循环的问题
- JSON3:JSON与XML数据之间的转换
- oj第十一周训练——趣味取小数
- 第10周练习(补)小学生加法题
- GIT上传、下载、还原
- bzoj 3450: Tyvj1952 Easy (概率与期望dp)
- form表单嵌套,用标签的form属性来解决表单嵌套的问题
- Jackson框架:Java对象与json、xml格式的数据之间的转换
- Android最佳的开源库(四)
- Android6.0关于预置三方app卸载(二) 调用接口安装
- window10 pl2303驱动解决
- 系统集成项目管理工程师---信息化知识
- [Anaconda2]Selenium+PhantomJS环境搭建
- queue by one stack、two stack and three stack
- dubbo的轮询机制说明
- 卷积RBM源码解读