47.md 6.4 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
# 杰克逊将对象转换为 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 依赖项,具体取决于您的项目类型。

#### 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 用例,可以从 [Central Maven 存储库](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/)下载 jar。

## 2.杰克逊 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 输出

如果看上面的输出,那么写在文本文件中的输出是非常原始的并且没有格式化。 您可以使用 ~~`defaultPrettyPrintingWriter()`~~ **`writerWithDefaultPrettyPrinter`** 实例编写格式化的 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();
      }
   }
}

```

Program Output.

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

```

Program Output.

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

```

Make sure you have defined a default constructor in your POJO class (e.g. `Employee.java` in our case). Jackson uses default constructor to create the instances of java class using reflection. If default constructor is not provided, then you will get `JsonMappingException` in runtime.

学习愉快!