# Jackson 将对象转换为 json 并将 json 转换为对象

> 原文： [https://howtodoinjava.com/jackson/jackson-convert-object-to-from-json/](https://howtodoinjava.com/jackson/jackson-convert-object-to-from-json/)

**Jackson** *将对象转换为 JSON* 示例，*将 json 转换为对象*示例。 学习使用 jackson `objectmapper`从 json 字符串填充 Java 对象，并从 java 对象写入 json 字符串。

Jackson 用于**将 Java 对象转换为 json** ，并**将 json 转换为 Java 对象**。 在这个快速的 **jackson 教程**中，我给出了将 Java 对象以编程方式转换为 json 的示例。

```java
Table of Contents

1\. Jackson maven dependency
2\. Convert Java object to JSON
3\. Pretty print JSON
4\. Convert JSON to Java object
```

在进入代码示例之前，让我们定义一个简单的 pojo 类，我们将在此示例中使用该类进行转换。

```java
public class Employee
{
   private Integer id;
   private String firstName;
   private String lastName;

   public Employee(){

   }

   public Employee(Integer id, String firstName, String lastName, Date birthDate){
      this.id = id;
      this.firstName = firstName;
      this.lastName = lastName;
   }

   //Getters and setters

   @Override
   public String toString()
   {
      return "Employee [id=" + id + ", firstName=" + firstName + ", " +
            "lastName=" + lastName + "]";
   }
}

```

## 1.Jackson 依赖

您可以通过两种方式添加 Jackson 依赖项，具体取决于您的项目类型。

#### 1.1 基于 Maven 的项目

在`pom.xml`文件中添加以下依赖项。

```java
<dependencies>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.9.6</version>
	</dependency>
</dependencies>

```

#### 1.2 对于 ANT 或其他项目类型

对于非 Maven 用例，可以从 [Maven 中央仓库](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/)下载 jar。

## 2.Jackson `ObjectMapper`

`ObjectMapper`是用于数据绑定的主要 API。 它带有几种读取器/写入器方法，以执行从 Java 到 JSON 的转换。 它将使用`JsonParser`和`JsonGenerator`的实例来实现 JSON 的实际读取/写入。

#### 2.1 将 json 转换为对象的语法

使用以下示例语法读取 JSON 并填充 Java 对象。

```java
ObjectMapper mapper = new ObjectMapper();
Object value = mapper.readValue(jsonSource , javaObject);

```

*   `jsonSource` – 将获取 json 字符串的输入源。
*   `javaObject` – 需要填充的目标 Java 对象。

#### 2.2 将对象转换为 json 的语法

使用以下示例语法将 Java 对象写入 json 字符串。

```java
ObjectMapper mapper = new ObjectMapper();
Object value = mapper.writeValue(jsonTarget, javaObject);

```

*   `jsonTarget` – 将写入 json 字符串的输出目标。
*   `javaObject` – 需要转换为 json 的源 Java 对象。

## 3\. Jackson 将对象转换为 JSON

要转换雇员对象并将其写入某个文件，可以使用以下代码。

```java
package test.jackson;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JavaToJSONExample
{
   public static void main(String[] args)
   {
      @SuppressWarnings("deprecation")
      Employee employee = new Employee(1, "Lokesh", "Gupta", new Date(1981,8,18));
      ObjectMapper mapper = new ObjectMapper();
      try
      {
         mapper.writeValue(new File("c://temp/employee.json"), employee);
      } catch (JsonGenerationException e)
      {
         e.printStackTrace();
      } catch (JsonMappingException e)
      {
         e.printStackTrace();
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}

```

程序输出。

```java
{"id":1,"firstName":"Lokesh","lastName":"Gupta"}

```

## 4\. Jackson 精美打印 JSON 输出

如果看上面的输出，那么写在文本文件中的输出是非常原始的并且没有格式化。 您可以使用`writerWithDefaultPrettyPrinter`而不是`defaultPrettyPrintingWriter()`实例编写格式化的 JSON 内容，如下所示：

```java
package test.jackson;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JavaToPrettyJSONExample
{
   public static void main(String[] args)
   {
      @SuppressWarnings("deprecation")
      Employee employee = new Employee(1, "Lokesh", "Gupta", new Date(1981,8,18));
      ObjectMapper mapper = new ObjectMapper();
      try
      {
         mapper.defaultPrettyPrintingWriter().writeValue(new File("c://temp/employee.json"), employee);
      } catch (JsonGenerationException e)
      {
         e.printStackTrace();
      } catch (JsonMappingException e)
      {
         e.printStackTrace();
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}

```

程序输出：

```java
{
  "id" : 1,
  "firstName" : "Lokesh",
  "lastName" : "Gupta"
}

```

## 5\. Jackson 将 JSON 转换为 Java 对象

要将 json 字符串转换为 java 对象（例如`Employee`对象），请使用以下代码：

```java
package test.jackson;

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

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JSONToJavaExample
{
   public static void main(String[] args)
   {
      Employee employee = null;
      ObjectMapper mapper = new ObjectMapper();
      try
      {
         employee =  mapper.readValue(new File("c://temp/employee.json"), Employee.class);
      } catch (JsonGenerationException e)
      {
         e.printStackTrace();
      } catch (JsonMappingException e)
      {
         e.printStackTrace();
      } catch (IOException e)
      {
         e.printStackTrace();
      }
      System.out.println(employee);
   }
}

```

程序输出：

```java
Employee [id=1, firstName=Lokesh, lastName=Gupta]

```

确保在 POJO 类中定义了默认的构造器（例如，本例中为`Employee.java`）。 Jackson 使用默认构造器通过反射来创建 Java 类的实例。 如果没有提供默认的构造器，那么您将在运行时得到`JsonMappingException`。

学习愉快！