💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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`。 学习愉快!