Jackson 是 Java 生態中最流行的 JSON 處理庫。本文提供完整可運行示例,涵蓋實體、集合、Map、數組與 JSON 字符串的雙向轉換,及 JsonGenerator 低級 API 使用。
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
注:現代項目建議使用 Jackson 2.x (com.fasterxml.jackson.core)
public class User {
private int uid;
private String uname;
private String upwd;
private double number;
// Getter/Setter 省略
@Override public String toString() { ... }
}
ObjectMapper mapper = new ObjectMapper();
// 對象轉 JSON 字符串
String json = mapper.writeValueAsString(user);
// JSON 轉對象
User u = mapper.readValue(json, User.class);
List<User> list = Arrays.asList(user1, user2);
// 序列化
String json = mapper.writeValueAsString(list);
// 反序列化為 List<Map> (無泛型擦除時)
List<Map<String, Object>> listMap = mapper.readValue(json,
new TypeReference<List<Map<String, Object>>>() {});
// 反序列化為 User[]
User[] users = mapper.readValue(json, User[].class);
Map<String, Object> map = new HashMap<>();
map.put("uid", 1);
map.put("name", "tom");
// 序列化
String json = mapper.writeValueAsString(map);
// 反序列化
Map<String, Object> result = mapper.readValue(json,
new TypeReference<Map<String, Object>>() {});
適用於大數據流式輸出,減少內存佔用:
JsonGenerator gen = mapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8);
gen.writeStartObject(); // {
gen.writeStringField("name", "jackson");
gen.writeBooleanField("sex", true);
gen.writeNumberField("age", 22);
gen.writeArrayFieldStart("infos"); // [
gen.writeNumber(22);
gen.writeString("this is array");
gen.writeEndArray(); // ]
gen.writeEndObject(); // }
gen.flush();
TypeReference 或 JavaType 保留泛型信息mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"))mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj)public class JacksonTest {
static ObjectMapper mapper = new ObjectMapper();
static User user = new User(5, "tom", "123", 3.44);
public static void main(String[] args) throws Exception {
// writeEntity2Json();
// writeList2Json();
// writeMap2Json();
// readJson2Entity();
// readJson2List();
// readJson2Array();
readJson2Map();
}
// 各方法實現見上...
}