整体对比结果
框架 | 性能 | 易用性 | 安全性 | 特点 | 依赖大小 |
Jackson | SpringBoot默认,功能最全面 | 1.2MB | |||
Gson | Google出品,API极简 | 700KB | |||
Fastjson | (序列化) | 阿里系,中文处理快,高危漏洞多 | 2.4MB | ||
JSON-B | Jakarta EE标准,与XML统一 | 1.1MB | |||
Hutool JSON | 国产工具集,零依赖,API极简 |
不同框架序列化实现
Jackson
// 序列化
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT); // 美化输出
String json = mapper.writeValueAsString(user);
// 反序列化
User user = mapper.readValue(json, User.class);
// 注解示例
public class User {
@JsonProperty("user_name")
private String name;
@JsonIgnore
private String password;
}
Gson
// 序列化
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(user);
// 反序列化
User user = gson.fromJson(json, User.class);
// 自定义适配器
Gson gson = new GsonBuilder()
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
.create();
Fastjson
// 序列化
String json = JSON.toJSONString(user, SerializerFeature.PrettyFormat);
// 反序列化
User user = JSON.parseObject(json, User.class);
// JSONPath查询
String name = (String) JSONPath.eval(json, "$.user.name");
JSON-B (Yasson实现)
// 序列化
Jsonb jsonb = JsonbBuilder.create();
String json = jsonb.toJson(user);
// 反序列化
User user = jsonb.fromJson(json, User.class);
// 注解示例
public class User {
@JsonbProperty("full_name")
private String name;
@JsonbTransient
private String password;
}
Hutool JSON
// 序列化(支持多种输入类型)
String json = JSONUtil.toJsonStr(user);
// 序列化(美化输出)
String prettyJson = JSONUtil.toJsonPrettyStr(user);
// 反序列化(到JavaBean)
User user = JSONUtil.toBean(json, User.class);
// 动态操作(无需定义Bean)
JSONObject jsonObj = JSONUtil.parseObj(json);
jsonObj.set("age", 30).set("address", "北京");
// XML转JSON
String json = JSONUtil.toJsonStr(XMLUtil.parseXml(xmlStr));