json-Jackson简单使用介绍
简介:
接下来介绍另外一中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类型。
简单使用:
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对象打印并输出
3、处理Product对象集合打印并输出
4、有时候我们会对json数据进行处理,是否需要指定的属性值,这里可以使用三种方式:
方式一:在pojo类成员变量添加注解“@JsonIgnore” 不保留该注解下的成员变量属性值
输出结果:
方式二:为pojo类添加注解“@JsonIgnoreProperties({"id","name"})” 不保留id和name属性值
输出结果:
方式三:硬编码方式实现
首先为pojo类添加注解
输出结果:
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简单用法
下一篇: jsonson GetStarted