在本教程中,我们向您展示如何使用Jackson 1.x数据绑定将Java对象转换为JSON。
注意
Jackson 1.x是一个维护项目,请改用Jackson2.x 。
注意
本教程已过时,不再进行更新,请参考最新的Jackson 2教程– JSON对象 。
1.快速参考
1.1将Java对象转换为JSON, writeValue(...)
ObjectMapper mapper = new ObjectMapper();
User user = new User();
//Object to JSON in file
mapper.writeValue(new File("c:\\user.json"), user);
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(user);
1.2将JSON转换为Java对象readValue(...)
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mkyong'}";
//JSON from file to Object
User user = mapper.readValue(new File("c:\\user.json"), User.class);
//JSON from String to Object
User user = mapper.readValue(jsonInString, User.class);
PS所有示例均已通过Jackson 1.9.13测试
2.杰克逊依赖
对于Jackson 1.x,它包含6个用于不同目的的单独jar,在大多数情况下,您只需要jackson-mapper-asl
。
pom.xml
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
3. POJO(普通的旧Java对象)
用于测试的用户对象。
User.java
package com.mkyong.json;
import java.util.List;
public class User {
private String name;
private int age;
private List<String> messages;
//getters and setters
}
4. Java对象到JSON
将user
对象转换为JSON格式的字符串。
JacksonExample.java
package com.mkyong.json;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
//For testing
User user = createDummyUser();
try {
//Convert object to JSON string and save into file directly
mapper.writeValue(new File("D:\\user.json"), user);
//Convert object to JSON string
String jsonInString = mapper.writeValueAsString(user);
System.out.println(jsonInString);
//Convert object to JSON string and pretty print
jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println(jsonInString);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static User createDummyUser(){
User user = new User();
user.setName("mkyong");
user.setAge(33);
List<String> msg = new ArrayList<>();
msg.add("hello jackson 1");
msg.add("hello jackson 2");
msg.add("hello jackson 3");
user.setMessages(msg);
return user;
}
}
输出量
//new json file is created in D:\\user.json"
{"name":"mkyong","age":33,"messages":["hello jackson 1","hello jackson 2","hello jackson 3"]}
{
"name" : "mkyong",
"age" : 33,
"messages" : [ "hello jackson 1", "hello jackson 2", "hello jackson 3" ]
}
5. JSON转换为Java对象
读取JSON字符串并将其转换回Java对象。
JacksonExample.java
package com.mkyong.json;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try {
// Convert JSON string from file to Object
User user = mapper.readValue(new File("G:\\user.json"), User.class);
System.out.println(user);
// Convert JSON string to Object
String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"mkyong\"}";
User user1 = mapper.readValue(jsonInString, User.class);
System.out.println(user1);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出量
User [name=mkyong, age=33, messages=[hello jackson 1, hello jackson 2, hello jackson 3]]
User [name=mkyong, age=33, messages=[msg 1, msg 2]]
6. @JsonView
自1.4版以来,Jackson已支持@JsonView
,它使您可以控制要显示的字段。
6.1一个简单的类。
Views.java
package com.mkyong.json;
public class Views {
public static class NameOnly{};
public static class AgeAndName extends NameOnly{};
}
6.2在要显示的字段上注释。
User.java
package com.mkyong.json;
import java.util.List;
import org.codehaus.jackson.map.annotate.JsonView;
public class User {
@JsonView(Views.NameOnly.class)
private String name;
@JsonView(Views.AgeAndName.class)
private int age;
private List<String> messages;
//getter and setters
}
6.3通过writerWithView()
启用@JsonView
。
JacksonExample.java
package com.mkyong.json;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
public class JacksonExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
//By default all fields without explicit view definition are included, disable this
mapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
//For testing
User user = createDummyUser();
try {
//display name only
String jsonInString = mapper.writerWithView(Views.NameOnly.class).writeValueAsString(user);
System.out.println(jsonInString);
//display namd ana age
jsonInString = mapper.writerWithView(Views.AgeAndName.class).writeValueAsString(user);
System.out.println(jsonInString);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static User createDummyUser(){
User user = new User();
user.setName("mkyong");
user.setAge(33);
List<String> msg = new ArrayList<>();
msg.add("hello jackson 1");
msg.add("hello jackson 2");
msg.add("hello jackson 3");
user.setMessages(msg);
return user;
}
}
输出量
{"name":"mkyong"}
{"name":"mkyong","age":33}
参考文献
翻译自: https://mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/