Jackson 使用(一)

Jackson简单介绍:

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

      json/xml------>java对象

      java对象------>json/xml

参考:http://www.blogjava.net/wangxinsh55/archive/2012/09/06/387179.html


jackson 1.x和2.x版本的注解是放置在不同的包下的

1.x是在jackson core jar包org.codehaus.jackson.annotate下

2.x是在jackson-databind包com.fasterxml.jackson.annotation下

依赖jar包:

 jackson-annotations-2.3.0.jar,jackson-core-2.3.0.jar,jackson-databind-2.3.0.jar

一.API文档:

http://fasterxml.github.io/jackson-databind/javadoc/2.0.4/

http://fasterxml.github.io/jackson-core/javadoc/2.0.4/

https://github.com/FasterXML/jackson-annotations

二·使用:

最重要的一个类:ObjectMapper用来转化json和java对象的

API解释:

 This mapper (or, data binder, or codec) provides functionality for converting between Java objects (instances of JDK provided core classes, beans), and matching JSON constructs. It will use instances of JsonParser and JsonGenerator for implementing actual reading/writing of JSON.

      

	@Test
	public void write2String() throws IOException{
		User u = new User("guofeipeng","123");
		List<String> ls = new ArrayList<String>();
		ls.add("123");
		ls.add("234");
		ls.add("345");
		u.setStrs(ls);
		ObjectMapper mapper = new ObjectMapper();
		String json = mapper.writeValueAsString(u);  //java 2 json
		System.out.println(json);
		
		
		User user = mapper.readValue(json, User.class);//json 2 java
		System.out.println(user);
	}





1.基本用法:

     1.1.序列化一个java对象

      java-->json

/**
	 * 序列化一个对象
	 * @param user
	 */
	@Test
	public void serialize() {
		System.out.println("=========serialize序列化对象==============");
		User user = new User("张三", "123");
		ObjectMapper mapper = new ObjectMapper();
		try {
			mapper.writeValue(new File("src/pros/user.json"), user);
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
        1.2.反序列化一个java对象
              json--->ava

/**
	 * 反序列化一个对象
	 */
	@Test
	public void deserialize() {
		System.out.println("========deserialize反序列化对象=========");
		ObjectMapper mapper = new ObjectMapper();
		User user = null;
		try {
			user = mapper.readValue(new File("src/pros/user.json"), User.class);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("userName:" + user.getName() + " password:"
				+ user.getPassword());
	}

        1.3.反序列化为一个Map集合(该)

@Test
	public void map() {
		System.out.println("==========读取值为Map========");
		ObjectMapper mapper = new ObjectMapper();
		Map map = null;
		try {
			map = mapper.readValue(new File("src/pros/user.json"), Map.class);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(map);
	}


            1.4.反序列化为一个Map集合(集合元素value是实体类对象的)

	/**
	 *json 解析成HashMap
	 */
	@Test
	public void map1(){
		String str ="{\"u1\":{\"name\":\"张三1\",\"password\":\"123\"},\"u2\":{\"name\":\"张三2\",\"password\":\"abc\"}}";
		ObjectMapper mapper = new ObjectMapper();
		HashMap<String,User> us = null;
		try {
			us = mapper.readValue(str,new TypeReference<HashMap<String,User>>(){});
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(us);
	}

2.Tree Model

       所有的json对象都是一个树形结构,可以比作DOM,XML类似节点。

     使用的类:ObjectMapper ,JsonNode,ObjectNode

   

@Test
	public void testTree2() throws JsonProcessingException, IOException {
		String TREE_MODEL_BINDING = "{\"姑姑\":\"王姑姑1\",\"叔叔1\":\"王书\",\"叔叔2\":[{\"侄子1\":\"小明\"}]}";
		ObjectMapper mapper = new ObjectMapper();  //定义转换类 
		ObjectNode root =mapper.createObjectNode();//创建根节点
		root.put("爷爷", "老老王");
		root.put("奶奶", "老老奶");
		
		ObjectNode parents = mapper.createObjectNode();  //创建2级子节点
		parents.put("爸爸", "老爸");
		parents.put("妈妈","老妈");
		root.put("parents", parents);      //绑定2级子节点
		
		JsonNode uncles = mapper.readTree(TREE_MODEL_BINDING);
		root.put("antOruncles",uncles);
		System.out.println(mapper.writeValueAsString(root));//打印树
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值