日期:2014-05-16  浏览次数:20345 次

使用Jackson在Java中处理JSON

前一段工作中总会遇到使用Java处理JSON的情况,大部分都使用的是开源工具Jackson实现的。

因此总结一下发上来,希望对看到的人有所帮助。

------------------------

一、入门

Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换。

1Java对象转换为JSON

User user=new User(); //Java Object

ObjectMapper mapper = new ObjectMapper();

mapper.writeValueAsString(user); //返回字符串

//输出格式化后的字符串(有性能损耗)

mapper.defaultPrettyPrintingWriter().writeValueAsString(user);

mapper.writeValue(new File("c:\\user.json"), user); //指定文件写入

?

//设置序列化配置(全局),设置序列化时不输出空值.

sharedMapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);

?

2JSON反序列化为Java对象:

ObjectMapper mapper = new ObjectMapper();

//解析器支持解析单引号

mapper.configure(Feature.ALLOW_SINGLE_QUOTES,true);

//解析器支持解析结束符

mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS,true);

HashMap jsonMap = mapper.readValue(json,HashMap.class); //转换为HashMap对象

?

二、Jackson支持3种使用方式:

1、Data Binding:最方便使用.

(1)Full Data Binding:

private static final String MODEL_BINDING = "{\"name\":\"name1\",\"type\":1}";
	public void fullDataBinding() throws Exception{
		ObjectMapper mapper = new ObjectMapper();
		Model user = mapper.readValue(MODEL_BINDING, Model.class);//readValue到一个实体类中.
		System.out.println(user.getName());
		System.out.println(user.getType());
	}

Model类:

private static class Model{
		private String name;
		private int type;
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getType() {
			return type;
		}
		public void setType(int type) {
			this.type = type;
		}
	}

(2)Raw Data Binding:

/**
	Concrete Java types that Jackson will use for simple data binding are:
	JSON Type