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

Jackson 将对象转换为 json 并将 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 的示例。

Table of Contents

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

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

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文件中添加以下依赖项。

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

1.2 对于 ANT 或其他项目类型

对于非 Maven 用例,可以从 Maven 中央仓库下载 jar。

2.Jackson ObjectMapper

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

2.1 将 json 转换为对象的语法

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

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

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

2.2 将对象转换为 json 的语法

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

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

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

3. Jackson 将对象转换为 JSON

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

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();
      }
   }
}

程序输出。

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

4. Jackson 精美打印 JSON 输出

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

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();
      }
   }
}

程序输出:

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

5. Jackson 将 JSON 转换为 Java 对象

要将 json 字符串转换为 java 对象(例如Employee对象),请使用以下代码:

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);
   }
}

程序输出:

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

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

学习愉快!