欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json-Jackson简单使用介绍

程序员文章站 2022-06-01 07:49:53
...

简介:

         接下来介绍另外一中json工具-Jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。

特点:

  • 容易使用 - jackson API提供了一个高层次外观,以简化常用的用例。

  • 无需创建映射 - API提供了默认的映射大部分对象序列化。

  • 性能高 - 快速,低内存占用,适合大型对象图表或系统。

  • 干净的JSON - jackson创建一个干净和紧凑的JSON结果,这是让人很容易阅读。

  • 不依赖 - 库不需要任何其他的库,除了JDK。

  • 开源代码 - jackson是开源的,可以免费使用。

  • Spring mvc 底层使用的就是Jackson

三种方式处理JSON:

提供了三种不同的方法来处理JSON

  • 流式API - 读取并将JSON内容写入作为离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低的开销和最快的读/写操作。它类似于Stax解析器XML。

  • 树模型 - 准备JSON文件在内存里以树形式表示。 ObjectMapper构建JsonNode节点树。这是最灵活的方法。它类似于XML的DOM解析器。

  • 数据绑定 - 转换JSON并从POJO(普通Java对象)使用属性访问或使用注释。它有两个类型。

    • 简单的数据绑定 - 转换JSON和Java Maps, Lists, Strings, Numbers, Booleans 和null 对象。

    • 全部数据绑定 - 转换为JSON从任何JAVA类型。

    ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。

简单使用:

    1、Product.java(pojo类)

package com.it.struts2.domain;

import java.util.Date;

public class Product {
	private Integer id;
	private String name;
	private double price;
	private Date releaseDate; // 生产日期

	public Integer getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public Date getReleaseDate() {
		return releaseDate;
	}

	public void setReleaseDate(Date releaseDate) {
		this.releaseDate = releaseDate;
	}

}

    2、处理Product对象打印并输出

json-Jackson简单使用介绍

    3、处理Product对象集合打印并输出

json-Jackson简单使用介绍

    4、有时候我们会对json数据进行处理,是否需要指定的属性值,这里可以使用三种方式:


方式一:在pojo类成员变量添加注解“@JsonIgnore” 不保留该注解下的成员变量属性值

json-Jackson简单使用介绍

输出结果:

json-Jackson简单使用介绍

方式二:为pojo类添加注解“@JsonIgnoreProperties({"id","name"})” 不保留id和name属性值

json-Jackson简单使用介绍

输出结果:

json-Jackson简单使用介绍

方式三:硬编码方式实现

首先为pojo类添加注解

json-Jackson简单使用介绍

输出结果:

json-Jackson简单使用介绍

JacksonDemo.java

package com.it.struts2.json.Jackson;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ser.FilterProvider;
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
import org.junit.Test;
import com.it.struts2.domain.Product;

public class JacksonDemo {
	@Test
	public void test() throws Exception, JsonMappingException, IOException {

		Product p = new Product();
		p.setId(1);
		p.setName("电视机");
		p.setPrice(100.0);
		p.setReleaseDate(new Date());
		// 获得mapper对象
		ObjectMapper mapper = new ObjectMapper();
		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); // 设置日期格式化器
		
		// 处理是否保留属性值
		FilterProvider fp = new SimpleFilterProvider().addFilter("productFilter",
				SimpleBeanPropertyFilter.filterOutAllExcept("id", "name")); // 只包含id与name
		
/*		SimpleFilterProvider fp = new SimpleFilterProvider().addFilter("productFilter",
				SimpleBeanPropertyFilter.serializeAllExcept("id", "name")); //不包含id与name    */		
		mapper.setFilters(fp); //添加默认过滤器
		String json = mapper.writeValueAsString(p); // 转换为json
		System.out.println(json);	// 输出
	}

	@Test
	public void test2() throws Exception, JsonMappingException, IOException {
		Product p = new Product();
		p.setId(1);
		p.setName("飞机");
		p.setPrice(122);
		p.setReleaseDate(new Date());

		Product p2 = new Product();
		p2.setId(2);
		p2.setPrice(100);
		p2.setName("洗碗机");
		p2.setReleaseDate(new Date());
		ArrayList<Product> list = new ArrayList<Product>();
		list.add(p);
		list.add(p2);

		// 获得mapper对象
		ObjectMapper mapper = new ObjectMapper();
		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); // 设置日期格式化器
		String json = mapper.writeValueAsString(list); // 转换为json
		// 打印
		System.out.println(json);
	}

}
总结:Jackson提供了丰富的注解开发,而且社区活跃度很高,开发中推荐使用。

相关标签: Jackson json