Jackson Basic

本文介绍如何使用Jackson库将Java对象转换为JSON字符串并保存到文件,以及如何从文件读取JSON字符串并转换回Java对象。展示了不同版本Jackson库中Pretty Print功能的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Maven Dependency

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.fool.jackson</groupId>
	<artifactId>Jackson</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Jackson</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.1.3</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.1</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

 

2.Project Directory


 

3.User.java

package org.fool.jackson;

import java.util.List;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class User
{
	private String name;
	private int age;
	private List<String> msgs;

	public User()
	{
	}

	public User(String name, int age, List<String> msgs)
	{
		this.name = name;
		this.age = age;
		this.msgs = msgs;
	}

	public String getName()
	{
		return name;
	}

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

	public int getAge()
	{
		return age;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public List<String> getMsgs()
	{
		return msgs;
	}

	public void setMsgs(List<String> msgs)
	{
		this.msgs = msgs;
	}

	@Override
	public String toString()
	{
		return ToStringBuilder.reflectionToString(this,
				ToStringStyle.SHORT_PREFIX_STYLE);
	}

}

 

4.Java Object To Json

Convert an “user” object into JSON formatted string, and save it into a file “user.json“.

package org.fool.jackson;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JavaObjectToJson
{
	public static void main(String[] args)
	{
		List<String> msgs = new ArrayList<>();
		msgs.add("msg1");
		msgs.add("msg2");
		msgs.add("msg3");

		User user = new User("Hero", 30, msgs);

		ObjectMapper mapper = new ObjectMapper();

		try
		{
			// convert user object to json string, and save to a file
			mapper.writeValue(new File("user.json"), user);

			// display to console
			System.out.println(mapper.writeValueAsString(user));

			// this is Jackson 1.x API only
			// System.out.println(mapper.defaultPrettyPrintingWriter()
			// 		.writeValueAsString(user));
			
			// for Jackson 2.x use the line below instead of the one
			System.out.println(mapper.writer().withDefaultPrettyPrinter()
					.writeValueAsString(user));
		}
		catch (JsonGenerationException e)
		{
			e.printStackTrace();
		}
		catch (JsonMappingException e)
		{
			e.printStackTrace();
		}
		catch (JsonProcessingException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}

结果 — JavaObjectToJson


从图中可以看出,下面的JSON格式输出更加pretty,但是Jackson1.x和Jackson2.x的Pretty Print的API是不一样的

Jackson 1.x的Pretty Print 采用如下格式

System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(user));

Jackson 2.x的Pretty Print 采用如下格式 

System.out.println(mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user));

我这里由于使用的是Jackson 2.x的API,所以采用下面一种方法。 

 

5.Json To Java Object

Read JSON string from file “user.json“, and convert it back to Java object.

package org.fool.jackson;

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonToJavaObject
{
	public static void main(String[] args)
	{
		ObjectMapper mapper = new ObjectMapper();
		
		try
		{
			// read from file, convert it to user class
			User user = mapper.readValue(new File("user.json"), User.class);
			
			// display to console
			System.out.println(user);
		}
		catch (JsonParseException e)
		{
			e.printStackTrace();
		}
		catch (JsonMappingException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}

结果 — JsonToJavaObject


  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值