使用Java处理JSON数据:创建与操作指南
在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端数据交互、配置文件存储等场景,Java本身没有内置的JSON处理库,但可以通过第三方库(如Gson、Jackson、org.json等)轻松实现JSON的创建与解析,本文将以常用的Gson和Jackson为例,详细介绍如何在Java中创建JSON数据,并附上代码示例与最佳实践。

选择合适的JSON库
在Java生态中,主流的JSON处理库包括Google的Gson、FasterXML的Jackson以及org.json,三者各有特点:
- Gson:API简洁,易于上手,适合中小型项目。
- Jackson:性能卓越,功能丰富,支持复杂对象映射,是企业级开发的首选。
- org.json:轻量级,适合简单场景,但功能相对有限。
本文将以Gson和Jackson为重点,展示如何创建JSON对象。
使用Gson创建JSON数据
添加依赖
在Maven项目的pom.xml中添加Gson依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
创建JSON对象
Gson提供了JsonParser和GsonBuilder等工具类,支持手动构建JSON或通过对象自动转换。
示例1:手动构建JSON
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonExample {
public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", "张三");
jsonObject.addProperty("age", 25);
jsonObject.addProperty("isStudent", true);
// 添加嵌套JSON对象
JsonObject address = new JsonObject();
address.addProperty("city", "北京");
address.addProperty("district", "海淀区");
jsonObject.add("address", address);
System.out.println(jsonObject.toString());
}
}
输出结果:

{"name":"张三","age":25,"isStudent":true,"address":{"city":"北京","district":"海淀区"}}
示例2:通过Java对象生成JSON
import com.google.gson.Gson;
class User {
private String name;
private int age;
// 省略getter/setter
}
public class GsonObjectExample {
public static void main(String[] args) {
User user = new User();
user.setName("李四");
user.setAge(30);
Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);
}
}
输出结果:
{"name":"李四","age":30}
使用Jackson创建JSON数据
添加依赖
在Maven中添加Jackson核心依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
创建JSON对象
Jackson的ObjectMapper是核心类,支持灵活的JSON操作。
示例1:手动构建JSON
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode jsonObject = mapper.createObjectNode();
jsonObject.put("name", "王五");
jsonObject.put("age", 28);
jsonObject.put("isStudent", false);
// 添加嵌套JSON对象
ObjectNode address = mapper.createObjectNode();
address.put("city", "上海");
address.put("district", "浦东新区");
jsonObject.set("address", address);
System.out.println(mapper.writeValueAsString(jsonObject));
}
}
输出结果与Gson示例类似。

示例2:通过Java对象生成JSON
import com.fasterxml.jackson.databind.ObjectMapper;
class Employee {
private String name;
private int salary;
// 省略getter/setter
}
public class JacksonObjectExample {
public static void main(String[] args) throws Exception {
Employee emp = new Employee();
emp.setName("赵六");
emp.setSalary(8000);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(emp);
System.out.println(json);
}
}
输出结果:
{"name":"赵六","salary":8000}
处理JSON数组与复杂结构
无论是Gson还是Jackson,都支持创建JSON数组。
示例:使用Gson创建JSON数组
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
public class JsonArrayExample {
public static void main(String[] args) {
JsonArray jsonArray = new JsonArray();
JsonObject user1 = new JsonObject();
user1.addProperty("name", "用户1");
user1.addProperty("age", 20);
JsonObject user2 = new JsonObject();
user2.addProperty("name", "用户2");
user2.addProperty("age", 22);
jsonArray.add(user1);
jsonArray.add(user2);
System.out.println(jsonArray.toString());
}
}
输出结果:
[{"name":"用户1","age":20},{"name":"用户2","age":22}]
最佳实践与注意事项
- 异常处理:JSON操作可能抛出
JsonSyntaxException(Gson)或JsonProcessingException(Jackson),需合理捕获。 - 性能优化:频繁创建
ObjectMapper或Gson实例会影响性能,建议复用这些对象。 - 日期格式化:使用
@JsonFormat(Jackson)或GsonBuilder.setDateFormat()(Gson)统一日期格式。 - 安全性:避免直接解析不可信的JSON数据,防止注入攻击。

















