`

jackson 转换json

 
阅读更多
Jackson可以将Java对象转换成json对象或json转成java对象,可以很方便的运用json作为信息的载体在服务端和客户端互相传递,现在的android/移动开发必备jackson。
测试类:
package com.demo.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.demo.entity.Account;

public class JacksonTest {
	private JsonGenerator jsonGenerator = null;
	private ObjectMapper objectMapper = null;
	private Account bean = null;
	
	@Before
	public void init() {
		bean = new Account();
		bean.setAddress("CHINA-BJ");
		bean.setEmail("11@qq.com");
		bean.setId(1);
		bean.setName("haha");
		
		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;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void writeEntityJson() {
		try {
			System.out.println("jsonGenerator");
			//writeObject可以转化java对象,eg:JavaBean/Map/List/Array
			jsonGenerator.writeObject(bean);
			System.out.println();
			System.out.println("objectMapper");
			//writeValue与writeObject有相同的功能
			objectMapper.writeValue(System.out, bean);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void writeMapJson() {
		try{
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("name", bean.getName());
			map.put("account", bean);
			bean = new Account();
			bean.setAddress("CHINA-GZ");
			bean.setEmail("22@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 (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void writeListJson() {
		try{
			List<Account> accounts = new ArrayList<Account>();
			accounts.add(bean);
			bean = new Account();
			bean.setId(2);
			bean.setName("lala");
			bean.setAddress("CHINA-GZ");
			bean.setEmail("22@qq.com");
			accounts.add(bean);
			
			System.out.println("jsonGenerator");
			jsonGenerator.writeObject(accounts);
			System.out.println();
			System.out.println("objectMapper");
			
			System.out.println("1###" + objectMapper.writeValueAsString(accounts));
			System.out.println("2###");
			objectMapper.writeValue(System.out, accounts);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void writeOthersJson() {
		try{
			String[] arr = {"abc", "def", "jhi"};
			System.out.println("jsonGenerator");
			String str = "Hello Jackson!";
			//byte
			jsonGenerator.writeBinary(str.getBytes());
			//boolean
			jsonGenerator.writeBoolean(true);
			//null
			jsonGenerator.writeNull();
			//float
			jsonGenerator.writeNumber(2.5f);
			//char
			jsonGenerator.writeRaw("c");
			//String
			jsonGenerator.writeRaw(str, 1, 5);
			//String
			jsonGenerator.writeRawValue(str, 5, 5);
			//String
			jsonGenerator.writeString(str);
			
			jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str));
			
			System.out.println();
			//Objcet {"user":{"name":"lala","sex":true,"age":26},"infos":[22,"Hello Jackson"]}
			jsonGenerator.writeStartObject(); //{
			jsonGenerator.writeObjectFieldStart("user"); //user:{
			jsonGenerator.writeStringField("name", "lala"); //name:lala
			jsonGenerator.writeBooleanField("sex", true); // sex:true
			jsonGenerator.writeNumberField("age", 26); // age:26
			jsonGenerator.writeEndObject(); //}
			
			//Array
			jsonGenerator.writeArrayFieldStart("infos"); //infos:[
			jsonGenerator.writeNumber(22); //22
			jsonGenerator.writeString("Hello Jackson"); //Hello Jackson
			jsonGenerator.writeEndArray(); //]
			jsonGenerator.writeEndObject(); //}
			
			// complex object
			jsonGenerator.writeStartObject();
			jsonGenerator.writeObjectField("account", bean);
			jsonGenerator.writeObjectField("infos", arr);
			jsonGenerator.writeEndObject();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void readJson2Entity() {
		try{
		String json = "{\"address\":\"SH\",\"name\":\"lala\",\"id\":1,\"email\":\"33@qq.com\"}";
		Account account = objectMapper.readValue(json, Account.class);
		System.out.println(account.getName());
		System.out.println(account);
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void others() {
		String json = "";
		try {
			//readJson2List
			List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json, List.class);
			//readJson2Array
			Account[] arr = objectMapper.readValue(json, Account[].class);
			//readJson2Map
			Map<String, Map<String, Object>> map = objectMapper.readValue(json, Map.class);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
}


对象:
package com.demo.entity;

import java.io.Serializable;

public class Account implements Serializable{

	private static final long serialVersionUID = -5985853834387791596L;
	private int id;
	private String name;
	private String email;
	private String address;
	private Birthday birthday;
	
	public Account () {
		super();
	}
	
	public Account(int id, String name, String email, String address,
			Birthday birthday) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
		this.address = address;
		this.birthday = birthday;
	}
	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;
	}
	@Override
	public String toString() {
		return "Account [id=" + id + ", name=" + name + ", email=" + email
				+ ", address=" + address + ", birthday=" + birthday + "]";
	}
	
}



ps:本来看到网上可以用jackson轻松轩成xml,但是XmlMapper已经在jackson-all jar包中不存在,有网友找到了方法,但是我还没有试,所以这里没有转成xml的测试方法。

参考资料:
http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html
http://wiki.fasterxml.com/JacksonInFiveMinutes
http://blog.sina.com.cn/s/blog_9d0ce63d01012vmd.html
分享到:
评论
1 楼 yujian58 2013-08-29  
不错了。 谢谢了。。。

相关推荐

    Jackson 框架,轻易转换JSON(转)

    - `ObjectMapper`: 是Jackson框架的主要入口点,它提供了一种灵活的方式来将Java对象转换为JSON字符串,反之亦然。 - `JsonNode`: 代表JSON数据结构的抽象树模型,用于解析或生成JSON。 - `JsonParser`: 用于读取...

    json转换工具jackson

    本文将深入探讨Jackson作为JSON转换工具的关键知识点,并基于提供的博文链接进行补充。 1. **Jackson库介绍** Jackson是一个开源项目,其核心库为`com.fasterxml.jackson.core`,包括`jackson-databind`、`jackson...

    Jackson将json string转为Object,org.json读取json数组的实例

    描述中提到了一个实例,也就是使用Jackson库将JSON字符串转换为Java对象(Map),然后使用org.json库读取JSON数组。实例中说明了遇到的困难,即在使用Map读取第一级数据之后,尝试读取数组中的特定值时遇到了问题,...

    Jackson 框架 json 到 复杂 list 的转换

    这篇博客"Jackson 框架 json 到 复杂 list 的转换"可能深入探讨了如何使用Jackson处理包含复杂数据结构的JSON列表。 在JSON到Java对象的转换中,Jackson允许我们将JSON字符串解析成Java对象,包括列表(List)和映射...

    Jackson 框架,轻易转换JSON

    - **XML与JSON互转**:Jackson还支持XML与JSON之间的转换,通过`jackson-dataformat-xml`模块实现。 - **流式处理**:对于处理大量数据时,Jackson提供了流式API,可以有效减少内存消耗。 - **类型安全的POJO操作*...

    Jackson 配置json解析器

    Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、序列化和反序列化JSON数据。标题中的“Jackson配置json解析器”指的是使用Jackson库来设置和管理JSON数据的解析过程。在这个...

    Java四大json库gson+fastjson+jackson+json-lib

    为了方便地处理JSON数据,Java社区提供了多个优秀的JSON库,包括Gson、Fastjson、Jackson和json-lib。这四大JSON库各有特点,适应不同的使用场景。 1. Gson: Gson是Google提供的一个开源库,它能够将Java对象转换...

    SpringMVC中后台转换json格式

    本文将详细介绍如何在SpringMVC中后台转换JSON格式,以解决406错误问题。 406错误通常发生在客户端发送了Accept头,表明它期望接收某种特定类型的数据,但服务器无法提供这种类型的数据。在Ajax请求中,这个Accept...

    jackson json与JavaBean互相转换

    json 所需要的jackson-annotations-2.4.0.jar,jackson-core-2.4.2.jar, jackson-databind-2.4.2.jar,jackson-mapper-asl-1.9.11.jar

    使用jackson完成json与java对象的互相转换实例

    Jackson是Java领域最流行的JSON处理库之一,它提供了高效且灵活的API来实现JSON与Java对象之间的相互转换。本实例将详细介绍如何使用Jackson库进行JSON到Java对象的反序列化以及Java对象到JSON的序列化。 首先,...

    jackson 对象json字符串数组集合互转

    Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来实现JSON与Java对象之间的转换。在标题“Jackson对象json字符串数组集合互转”中,提到的核心概念是Jackson如何处理JSON字符串与Java集合...

    jackson操作json和javabean示例

    Jackson是Java领域中广泛使用的JSON处理库,它提供了多种方式来序列化和反序列化Java对象到JSON格式,以及从JSON数据还原Java对象。在这个名为"jackson操作json和javabean示例"的项目中,我们将深入探讨Jackson库的...

    jackson_json转换.zip

    这个名为"jackson_json转换.zip"的压缩包包含三个关键的Jackson库文件:`jackson-databind-2.2.3.jar`、`jackson-core-2.2.3.jar`和`jackson-annotations-2.2.3.jar`。这些组件构成了Jackson库的核心部分,它们各自...

    jackson json 转 map 数值科学计数法的问题解决.docx

    Jackson 是一个流行的 Java 库,用于将 JSON 数据转换为 Java 对象或 Map。在使用 Jackson 将 JSON 转换为 Map 的过程中,可能会遇到科学计数法的问题。该问题的出现是因为 JSON 中的数值类型太多,在转换过程中可能...

    Jackson JSON jar包

    这极大地方便了JSON与Java对象之间的转换,尤其在进行数据交换或持久化存储时。 3. **Jackson-annotations**: 这是一个用于提供元数据的模块,包含了一系列的注解,如`@JsonProperty`、`@JsonInclude`和`@...

    使用jackson完成json与Java对象互转

    Jackson库是Java领域中处理JSON的利器,它提供了高效且灵活的API来实现JSON与Java对象之间的转换。本文将详细介绍如何使用Jackson库进行JSON与Java对象的互转。 首先,我们需要引入Jackson库的依赖。对于Maven项目...

    《Jackson 框架,轻易转换JSON》学习笔记

    本篇学习笔记将深入探讨Jackson框架的核心概念和使用方法,帮助你轻松应对JSON与Java对象之间的转换。 1. Jackson简介 Jackson是由FasterXML团队开发的一个开源项目,其主要目标是提供高性能、高效率的JSON处理功能...

    Android JackSon解析JSON

    3. `jackson-databind`: 基于注解的映射层,允许将Java对象转换为JSON,反之亦然。 接下来,我们创建一个简单的Java对象,例如`User`,并为其添加Jackson注解: ```java import ...

    Java bean转换为Json Schema

    Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...

    spring使用jackson实现json

    在Spring中,我们通常会使用`Jackson.databind`模块,因为它提供了`ObjectMapper`类,可以方便地将Java对象转换为JSON字符串,反之亦然。为了集成Jackson,首先需要在项目中引入对应的依赖。对于Maven项目,可以在...

Global site tag (gtag.js) - Google Analytics