原文: https://howtodoinjava.com/jackson/jackson-2-convert-json-to-from-java-object/

在本教程中,我们将学习使用 Jackson2 库将 JSON 转换为 Java 对象 – 和将 Java 对象转换为 JSON

  1. Table of Contents
  2. Jackson2 maven dependency
  3. Convert Java object to JSON
  4. Convert JSON to Java object

1.Jackson2 Maven 依赖

要将 Jackson2 库包含在您的项目中,请在pom.xml中包含以下依赖项。

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.6.4</version>
  5. </dependency>

您可以从 maven 站点找到可下载的 jar 文件。

2.将 Java 对象转换为 JSON 的示例

在简单的 pojo 对象之间进行转换时,Jackson 非常直接。 通常只涉及两个步骤,

  • 创建com.fasterxml.jackson.databind.ObjectMapper的实例
  • 使用objectMapper.writeValueAsString()方法将 pojo 转换为 JSON
  1. //Simple POJO
  2. Employee emp = new Employee(1, "Lokesh Gupta", 34, "India");
  3. //Object mapper instance
  4. ObjectMapper mapper = new ObjectMapper();
  5. //Convert POJO to JSON
  6. String json = mapper.writeValueAsString(emp);

2.1 将 Java 对象转换为 JSON 的 Java 程序

  1. package com.howtodoinjava.jackson2.example;
  2. import java.io.IOException;
  3. import com.fasterxml.jackson.core.JsonGenerationException;
  4. import com.fasterxml.jackson.databind.JsonMappingException;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.howtodoinjava.jackson2.example.pojo.Employee;
  7. public class FromJavaPojoToJSON
  8. {
  9. public static void main(String[] args)
  10. {
  11. Employee emp = new Employee(1, "Lokesh Gupta", 34, "India");
  12. ObjectMapper mapper = new ObjectMapper();
  13. try
  14. {
  15. String json = mapper.writeValueAsString(emp);
  16. System.out.println(json);
  17. //Use pretty print for printing the output
  18. String beutifulJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
  19. System.out.println(beutifulJson);
  20. } catch (JsonGenerationException e) {
  21. e.printStackTrace();
  22. } catch (JsonMappingException e) {
  23. e.printStackTrace();
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  1. Output:
  2. {"id":1,"name":"Lokesh Gupta","age":34,"location":"India"}
  3. {
  4. "id" : 1,
  5. "name" : "Lokesh Gupta",
  6. "age" : 34,
  7. "location" : "India"
  8. }

这里使用的 POJO 对象是:

  1. package com.howtodoinjava.jackson2.example.pojo;
  2. public class Employee
  3. {
  4. private Integer id;
  5. private String name;
  6. private Integer age;
  7. private String location;
  8. public Employee(Integer id, String name, Integer age, String location) {
  9. super();
  10. this.id = id;
  11. this.name = name;
  12. this.age = age;
  13. this.location = location;
  14. }
  15. //Setters and Getters will be added here
  16. @Override
  17. public String toString() {
  18. return "Employee [id=" + id + ", name=" + name + ", age=" + age
  19. + ", location=" + location + "]";
  20. }
  21. }

3.将 JSON 转换为 Java 对象的示例

就像上面的示例一样,从 JSON 到 POJO 的转换也仅涉及两个步骤,

  • 创建com.fasterxml.jackson.databind.ObjectMapper的实例
  • 使用objectMapper.readValue()方法将 JSON 转换为 POJO

例如:

  1. //JSON input
  2. String json = "{\"id\":1,\"name\":\"Lokesh Gupta\",\"age\":34,\"location\":\"India\"}";
  3. //Object mapper instance
  4. ObjectMapper mapper = new ObjectMapper();
  5. //Convert JSON to POJO
  6. Employee emp = mapper.readValue(json, Employee.class);

我们可以在 Java 中读取 json 文件,并将其传递给 jackson 库。

3.1 将 JSON 转换为 Java 对象的 Java 程序

  1. package com.howtodoinjava.jackson2.example;
  2. import java.io.IOException;
  3. import com.fasterxml.jackson.core.JsonGenerationException;
  4. import com.fasterxml.jackson.databind.JsonMappingException;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.howtodoinjava.jackson2.example.pojo.Employee;
  7. public class FromJSONToPOJO {
  8. public static void main(String[] args) {
  9. String json = "{\"id\":1,\"name\":\"Lokesh Gupta\",\"age\":34,\"location\":\"India\"}";
  10. ObjectMapper mapper = new ObjectMapper();
  11. try
  12. {
  13. Employee emp = mapper.readValue(json, Employee.class);
  14. System.out.println(emp);
  15. }
  16. catch (JsonGenerationException e)
  17. {
  18. e.printStackTrace();
  19. } catch (JsonMappingException e) {
  20. e.printStackTrace();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }

程序输出。

  1. Employee [id=1, name=Lokesh Gupta, age=34, location=India]

请不要忘记在 POJO 类中添加默认的构造器,否则会出现此错误:

  1. com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.howtodoinjava.jackson2.example.pojo.Employee]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
  2. at [Source: {"id":1,"name":"Lokesh Gupta","age":34,"location":"India"}; line: 1, column: 2]
  3. at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
  4. at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1106)
  5. at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:296)
  6. at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:133)
  7. at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
  8. at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2726)
  9. at com.howtodoinjava.jackson2.example.FromJSONToPOJO.main(FromJSONToPOJO.java:18)

以上就是使用 Jackson2 库将 Java 对象转换为 JSON 并将 JSON 字符串转换为 Java 对象的所有示例。

让我知道您是否对如何将 json 对象转换为 java 对象有任何疑问。

学习愉快!