原文: 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 的转换。 它将使用JsonParser
和JsonGenerator
的实例来实现 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
。
学习愉快!