`
bugyun
  • 浏览: 559478 次
社区版块
存档分类
最新评论

Jackson 框架JSON、XML、List、Map直接相互转换

    博客分类:
  • json
 
阅读更多

参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html

在其基础上做了稍微调整

详情见附件

jackson API文档:http://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9

 

Jackson 框架,轻易转换JSON

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。

 

一、准备工作

 pom.xml 里关联jar包如下:

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.waegg</groupId>
	<artifactId>jacksonTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
			<version>2.7.1</version>
		</dependency>
	</dependencies>

	<packaging>war</packaging>
</project>
 

 

二、Bean代码

   AccountBean :

 

package com.bugyun.pojo;

public class AccountBean {
	private int id;
	private String name;
	private String email;
	private String address;
	private Birthday birthday;

	// getter、setter

	@Override
	public String toString() {
		return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Birthday getBirthday() {
		return birthday;
	}

	public void setBirthday(Birthday birthday) {
		this.birthday = birthday;
	}
}
 
Birthday:
package com.bugyun.pojo;

public class Birthday {
	private String birthday;

	public Birthday(String birthday) {
		super();
		this.birthday = birthday;
	}

	// getter、setter

	public Birthday() {
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		return this.birthday;
	}
}
 

 

 

三、测试代码

 

package com.bugyun.test;

import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.bugyun.pojo.AccountBean;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

/**
 * 项目名称:jacksonTest  
 * 类名称:JacksonTest.java  
 * 类描述:  
 * 创建人:beyond  
 * 创建时间:2016年2月24日 上午11:24:33  
 * 修改人:  
 * 修改时间:  
 * 修改备注:  
 * @version
 */
public class JacksonTest {
	
	private JsonGenerator jsonGenerator = null;
	private ObjectMapper objectMapper = null;
	private AccountBean bean = null;
	    
	@Before
	public void init() {
		bean = new AccountBean();
		bean.setAddress("js_wuxi");
		bean.setEmail("bugyun@hotmail.com");
		bean.setId(1);
		bean.setName("bugyun");

		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();
		}
	}
	
	
	/**
	 * 
	 * @description: JavaBean(Entity/Model)转换成JSON  
	 * 		上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的转换,二者传递的参数及构造的方式不同;
	 * 		JsonGenerator的创建依赖于ObjectMapper对象。
	 * 		也就是说如果你要使用JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。
	 * 		但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。objectMapper的writeValue方法可以将一个Java对象转换成JSON。
	 * 		这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容。
	 * 		或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息。
	 * 		第二个参数是将要被转换的Java对象。如果用三个参数的方法,那么是一个Config。
	 * 		这个config可以提供一些转换时的规则,过指定的Java对象的某些属性进行过滤或转换等。  
	 * 
	 * 		输出:
	 * 			jsonGenerator	{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}
	 * 			ObjectMapper	{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null} 
	 * @return void   
	 * @throws
	 * @author beyond
	 * @data:2016年2月24日上午11:34:53
	 */
	@Test
	public void writeEntityJSON() {
	    try {
	        System.out.println("jsonGenerator");
	        jsonGenerator.writeObject(bean);    
	        
	        System.out.println("\nObjectMapper");
	        objectMapper.writeValue(System.out, bean);
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	}
	
	
	/**
	 * @description: 将Map集合转换成Json字符串    
	 * 		输出:
	 * 			jsonGenerator	{"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
	 * 			ObjectMapper	{"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月24日上午11:41:48
	 */
	@Test
	public void writeMapJSON() {
		try {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("name", bean.getName());
			map.put("account", bean);

			System.out.println("jsonGenerator");
			jsonGenerator.writeObject(map);

			System.out.println("\n ObjectMapper");
			objectMapper.writeValue(System.out, map);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 
	 * @description: 将List集合转换成json 
	 * 	外面就是多了个[]中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的
	 *    输出:
	 *    	jsonGenerator	[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
	 *    	ObjectMapper	1###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
	 *    					2###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月24日上午11:46:41
	 */
	@Test
	public void writeListJSON() {
		try {
			List<AccountBean> list = new ArrayList<AccountBean>();
			list.add(bean);
			
			System.out.println("jsonGenerator");
			jsonGenerator.writeObject(list);
			
			System.out.println("\nObjectMapper");
			System.out.println("1###" + objectMapper.writeValueAsString(list));
			
			System.out.print("2###");
			objectMapper.writeValue(System.out, list);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
	/**
	 * @description: 复杂的Java类型的JSON转换    
	 * 		输出:
	 * 			{"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]} 
	 * 			{"user":{"id":1,"name":"haha","email":"email","address":"address","birthday":null},"infos":["a","b","c"]}
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月24日下午1:08:06
	 */
	@Test
	public void writeOthersJSON() {
	    try {
	        String[] arr = { "a", "b", "c" };
	        //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");
	        jsonGenerator.writeStartObject();//{
	        jsonGenerator.writeObjectField("user", bean);//user:{bean}
	        jsonGenerator.writeObjectField("infos", arr);//infos:[array]
	        jsonGenerator.writeEndObject();//}

	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	
	
	/**
	 * @description: 将json字符串转换成JavaBean对象   
	 * 		用到了ObjectMapper这个对象的readValue这个方法,这个方法需要提供2个参数。
	 * 		第一个参数就是解析的JSON字符串,
	 * 		第二个参数是将这个JSON解析持什么Java对象,Java对象的类型。当然,还有其他相同签名方法。
	 *  	
	 *  	输出:
	 *  		haha
	 *  		haha#1#address#null#email
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月24日下午3:37:50
	 */
	@Test
	public void readJson2Entity() {
		String json = "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}";
		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();
		}
	}
	
	
	/**
	 * @description: json字符串转换成list<map> 
	 * 		输出:
	 * 			address:address2
	 * 			name:haha2
	 * 			id:2
	 * 			email:email2
	 * 			address:address
	 * 			name:haha
	 * 			id:1
	 * 			email:email
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月25日下午4:39:39
	 */
	@Test
	public void readJson2List() {
		String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
				+ "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";
		try {
			List<Map<String, Object>> list = objectMapper.readValue(json, List.class);
//			System.out.println(list.size());
			for (int i = 0; i < list.size(); i++) {
				Map<String, Object> map = list.get(i);
				Set<String> set = map.keySet();
				for (Iterator it = set.iterator(); it.hasNext();) {
					String key = (String) it.next();
					System.out.println(key + ":" + map.get(key));
				}
			}
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 
	 * @description: json字符串转换成Array 
	 * 		输出:
	 * 			haha2#2#address2#null#email2
	 * 			haha#1#address#null#email   
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月25日下午4:44:09
	 */
	@Test
	public void readJson2Array() {
		String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
				+ "{\"address\":\"address\",\"name\":\"haha\",\"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();
		}
	}
	
	
	/**
	 * 
	 * @description: json字符串转换Map集合    
	 * 		输出:
	 * 			success:true
	 * 			A:{address=address2, name=haha2, id=2, email=email2}
	 * 			B:{address=address, name=haha, id=1, email=email}
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月25日下午4:48:40
	 */
	@Test
	public void readJson2Map() {
		String json = "{\"success\":true,\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
				+ "\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}";
		try {
			Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class);
//			System.out.println(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();
		}
	}
	
	
	
	/**
	 * @description: java Object 转换为 xml
	 * 		输出:
	 * 			<ArrayList xmlns=""><item><id>1</id><name>bugyun</name><email>bugyun@hotmail.com</email><address>js_wuxi</address><birthday/></item></ArrayList>
	 * 			<HashMap xmlns=""><A><id>1</id><name>bugyun</name><email>bugyun@hotmail.com</email><address>js_wuxi</address><birthday/></A></HashMap>
	 * @return void    
	 * @throws
	 * @author beyond
	 * @data:2016年2月26日上午9:20:49
	 */
	@Test
	public void writeObject2Xml() {
	    XmlMapper xml = new XmlMapper();
	    
	    try {
	        //javaBean转换成xml
	        //xml.writeValue(System.out, bean);
	        StringWriter sw = new StringWriter();
	        xml.writeValue(sw, bean);
//	        System.out.println(sw.toString());
//	        List转换成xml
	        List<AccountBean> list = new ArrayList<AccountBean>();
	        list.add(bean);
	        System.out.println(xml.writeValueAsString(list));
	        
//	        Map转换xml文档
	        Map<String, AccountBean> map = new HashMap<String, AccountBean>();
	        map.put("A", bean);
	        System.out.println(xml.writeValueAsString(map));
	    } catch (JsonGenerationException e) {
	        e.printStackTrace();
	    } catch (JsonMappingException e) {
	        e.printStackTrace();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	}
	
}
 

 

 

分享到:
评论

相关推荐

    json转为list 涉及 java springboot

    在 Java 中,我们可以使用各种库和框架来将 JSON 转换为 List。其中,常用的库包括 Jackson、Gson 和 Fastjson 等。下面,我们将使用 Jackson 库来将 JSON 转换为 List。 首先,我们需要添加 Jackson 库的依赖项到...

    Java读取json文件,并转化为map取值

    如果JSON包含嵌套的对象或数组,它们会被转换为`Map`或`List`。 对于Map取值,你可以使用`get`方法: ```java String key = "exampleKey"; Object value = jsonData.get(key); ``` 如果值是另一个JSON对象或数组...

    java转换xml、list、map和json.pdf

    1. **XML到Map转换**: - 使用`dom4j`库可以解析XML文档为DOM(Document Object Model)对象,然后遍历DOM树将元素转换为Map。`DocumentHelper.createDocument()`方法创建一个新的XML文档对象,`Document`类代表...

    java对象List,Map转json格式

    本篇文章将深入探讨如何将Java中的List和Map对象转化为JSON格式,并涉及与AJAX交互的相关知识。 1. **Java JSON库**: 在Java中,我们可以使用多种库来实现对象到JSON的转换,如Jackson、Gson、Fastjson等。这里以...

    java转换xml、list、map和json.docx

    在Java开发中,XML、List、Map和JSON之间的转换是常见的需求。XML用于数据交换,而JSON则常用于前后端的数据传输。以下是一些关于如何在Java中进行这些转换的关键知识点: 1. **XML到Map转换**: - 使用`...

    java转换xml、list、map和json[借鉴].pdf

    Java在软件开发中经常涉及到数据格式的转换,如XML、List、Map以及JSON之间的相互转换。这些转换在处理数据交换、API调用或是序列化时非常常见。以下是一些关于如何在Java中进行这些转换的知识点: 1. JSON转换: ...

    SSM框架json使用jackson

    2. **Service层对象转换**:在业务逻辑中,我们可能会用到`ObjectMapper`来手动转换对象,比如将数据库查询结果转化为JSON格式返回给前端。 3. **配置优化**:在Spring的配置文件中,我们可以对Jackson进行定制,...

    java转换xml、list、map和json(20210924214538)[借鉴].pdf

    Java在软件开发中经常涉及到数据格式的转换,如XML、List、Map以及JSON之间的相互转换。这些转换在处理数据交换、API接口或者序列化时尤为关键。以下将详细讲解如何在Java中进行这些转换。 首先,JSON(JavaScript ...

    ajax和json跟java实现List、Map直接传递

    在Java服务端,你可以使用如下的代码将List或Map转换为JSON: ```java import org.json.JSONArray; import org.json.JSONObject; // List转换 List&lt;String&gt; list = Arrays.asList("item1", "item2"); JSONArray ...

    jackson的jar包,用于转换map与list到json

    这个特定的jar包专注于将Map和List对象转换为JSON格式,这意味着它包含了Jackson的核心组件,如`Jackson-databind`模块,该模块提供了`ObjectMapper`类,它是Jackson序列化和反序列化的主力。 使用Jackson,你可以...

    Ajax&Json&XML.html

    JSON数据和Java对象的相互转换 常见的解析器:Jsonlib,Gson,fastjson,jackson JSON转为Java对象 1. 导入jackson的相关jar包 2. 创建Jackson核心对象 ObjectMapper 3.调用ObjectMapper的相关方法进行...

    Eclipse中新建SpringBoot项目完成对json、pojo、map、list的请求源码

    在Eclipse中创建一个全新的Spring Boot项目,我们可以利用Spring框架的强大功能来处理JSON数据、POJO对象、Map以及List类型的请求。Spring Boot简化了Spring应用的初始搭建以及开发过程,它集成了大量的常用库,使得...

    ssh中将含有级联对象的list转化为json

    总结,SSH框架中将含有级联对象或集合的list转化为JSON,主要涉及Java对象到JSON的转换、EasyUI的数据格式要求以及与前端的数据交互。通过引入和使用Jackson库,我们可以方便地完成这一过程。同时,确保前端能够正确...

    json 与java之间数据的转换

    要将Java List转换为JSON,使用`writeValueAsString()`方法,但这次传入的是List: ```java String jsonArrayString = mapper.writeValueAsString(people); ``` 5. JSON到自定义复杂Java对象 对于更复杂的结构,...

    jackson jar包

    - **Map与JSON**:Jackson可以方便地处理`Map, Object&gt;`类型的数据,将Map转换为JSON或反之。`ObjectMapper.writeValueAsString(map)`可以将Map转换为JSON字符串,`mapper.readValue(json, Map.class)`则能将JSON...

    json和java互转demo(jackson)

    Jackson库提供了高效、灵活的API,使得JSON与Java对象之间的转换变得简单易行。 Jackson库由FasterXML公司开发,其核心组件包括`Jackson-databind`、`Jackson-core`和`Jackson-annotations`。在本项目中,`jackson-...

    JsonUtils(Json转换工具类)

    比如,`fromJsonToList(String jsonString, Class&lt;T&gt; elementType)`可以将JSON数组转换为List,`fromJsonToMap(String jsonString, Class&lt;K&gt; keyType, Class&lt;V&gt; valueType)`可以将JSON对象转换为Map, V&gt;。...

    利用java读取web项目中json文件为map集合方法示例

    最后,使用org.json库的`JSONArray.fromObject()`方法将JSON字符串转换为`JSONArray`对象,再进一步转换为`List&lt;Map&gt;`: ```java import org.json.JSONArray; import org.json.JSONObject; List&lt;Map, Object&gt;&gt; ...

Global site tag (gtag.js) - Google Analytics