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类型。

    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对象打印并输出


    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提供了丰富的注解开发,而且社区活跃度很高,开发中推荐使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Jackson将Java对象转换为JSON对象的步骤如下: 1. 创建一个ObjectMapper对象,该对象用于序列化和反序列化Java对象和JSON对象。 2. 如果Java对象的属性名称和JSON对象的属性名称不同,则需要使用@JsonProperty注解为Java对象的属性指定别名。 3. 将Java对象转换为JSON对象,可以使用ObjectMapper的writeValueAsString方法。该方法将Java对象转换为JSON字符串。 4. 可以使用ObjectMapper的writeValue方法将Java对象转换为JSON文件或输出流。 下面是一个示例代码: ``` import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.IOException; public class JacksonDemo { public static void main(String[] args) throws IOException { // 创建一个Java对象 Person person = new Person("张三", 18); // 创建一个ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 将Java对象转换为JSON字符串 String jsonString = objectMapper.writeValueAsString(person); System.out.println(jsonString); // 将Java对象转换为JSON文件 objectMapper.writeValue(new File("person.json"), person); } // 定义一个Java对象 public static class Person { @JsonProperty("name") private String name; @JsonProperty("age") private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 省略getter和setter方法 } } ``` 在上面的示例代码中,将Java对象Person转换为JSON字符串和JSON文件,其中name属性的别名为"name",age属性的别名为"age"。可以看到,使用Jackson将Java对象转换为JSON对象非常简单

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值