Java中几种不同JSON框架的对比

整体对比结果

框架

性能

易用性

安全性

特点

依赖大小

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));
原文链接:,转发请注明来源!