Java接收JSON数组的方法与实践
在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于前后端数据交互、API调用等场景,接收JSON数组是常见需求,例如从HTTP请求中解析前端提交的数组数据,或处理第三方服务返回的批量信息,本文将详细介绍Java接收JSON数组的多种方法,包括使用原生JSON库、第三方库(如Gson、Jackson、Fastjson)以及Spring框架中的集成方案,并辅以代码示例和注意事项,帮助开发者高效实现功能。

使用原生JSON库(仅限Java EE 8+)
Java EE 8及以上版本引入了javax.json包,提供了原生的JSON处理能力,虽然功能相对基础,但对于简单场景已足够。
核心步骤:
- 解析JSON字符串:通过
JsonReader读取JSON数组,转换为JsonArray对象。 - 遍历数组:使用
JsonArray的迭代方法逐个访问元素。
代码示例:
import javax.json.JsonArray;
import javax.json.JsonReader;
import java.io.StringReader;
public class NativeJsonArrayExample {
public static void main(String[] args) {
String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
try (JsonReader reader = Json.createReader(new StringReader(jsonArrayStr))) {
JsonArray jsonArray = reader.readArray();
for (int i = 0; i < jsonArray.size(); i++) {
JsonObject jsonObject = jsonArray.getJsonObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
}
}
}
注意事项:
- 需要Java EE 8环境,或引入
javax.json依赖(如jakarta.json-api)。 - 功能有限,复杂嵌套结构处理较繁琐,推荐仅用于轻量级场景。
使用Gson库(Google)
Gson是Google推出的JSON处理库,以其简洁的API和强大的功能成为开发者常用选择。
核心步骤:
- 定义实体类:根据JSON数组中的对象结构创建对应的Java类。
- 解析JSON:通过
Gson的fromJson方法直接将JSON数组转换为List集合。
代码示例:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class GsonJsonArrayExample {
public static void main(String[] args) {
String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
Gson gson = new Gson();
Type userListType = new TypeToken<List<User>>() {}.getType();
List<User> userList = gson.fromJson(jsonArrayStr, userListType);
userList.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
}
}
class User {
private String name;
private int age;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
注意事项:

- 需添加Gson依赖(Maven:
com.google.code.gson:gson:2.8.9)。 - 支持复杂对象映射、泛型集合,灵活性高。
- 实体类字段需与JSON键名一致(可通过
@SerializedName注解自定义映射)。
使用Jackson库(高性能首选)
Jackson是Java生态中最流行的JSON库之一,以其高性能和丰富的功能著称,常用于Spring Boot项目。
核心步骤:
- 配置ObjectMapper:Jackson的核心解析器,支持多种数据绑定方式。
- 反序列化JSON数组:通过
ObjectMapper的readValue方法将JSON转换为List。
代码示例:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonJsonArrayExample {
public static void main(String[] args) throws Exception {
String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
ObjectMapper objectMapper = new ObjectMapper();
List<User> userList = objectMapper.readValue(jsonArrayStr, new TypeReference<List<User>>() {});
userList.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
}
}
// User类同Gson示例
注意事项:
- 需添加Jackson依赖(Maven:
com.fasterxml.jackson.core:jackson-databind:2.13.0)。 - 性能优异,支持流式解析(
JsonParser),适合大数据量场景。 - 可通过
@JsonProperty等注解灵活配置字段映射。
使用Fastjson库(阿里巴巴)
Fastjson是阿里巴巴开源的高性能JSON库,解析速度极快,但在某些版本中存在安全漏洞,需谨慎选择版本。
核心步骤:
- 直接解析:通过
JSON.parseArray方法将JSON字符串转换为List。
代码示例:
import com.alibaba.fastjson.JSON;
import java.util.List;
public class FastjsonJsonArrayExample {
public static void main(String[] args) {
String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
List<User> userList = JSON.parseArray(jsonArrayStr, User.class);
userList.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
}
}
// User类同Gson示例
注意事项:

- 需添加Fastjson依赖(Maven:
com.alibaba:fastjson:1.2.83,建议使用最新安全版本)。 - 解析速度最快,但需注意已知漏洞(如1.2.68版本前的远程代码执行风险)。
- API简洁,适合对性能要求极高的场景。
Spring框架中的JSON数组接收
在Spring Boot项目中,可通过@RequestBody注解直接将HTTP请求中的JSON数组绑定到方法参数。
核心步骤:
- 配置消息转换器:默认使用Jackson,无需额外配置。
- 定义Controller方法:使用
@RequestBody接收JSON数组并自动映射为List。
代码示例:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@PostMapping("/users")
public String saveUsers(@RequestBody List<User> users) {
users.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
return "Saved " + users.size() + " users";
}
}
// User类同前
注意事项:
- 需确保Spring Boot项目中包含
spring-boot-starter-web依赖(默认包含Jackson)。 - 支持复杂对象嵌套,可通过
@Valid注解实现数据校验。 - 前端请求需设置
Content-Type: application/json。
总结与最佳实践
-
场景选择:
- 简单场景或Java EE环境:优先使用原生
javax.json。 - 高性能需求:Jackson或Fastjson(注意版本安全性)。
- Spring项目:直接集成Jackson,通过
@RequestBody简化开发。
- 简单场景或Java EE环境:优先使用原生
-
通用建议:
- 实体类字段与JSON键名保持一致,或使用注解明确映射关系。
- 处理异常:捕获
JsonSyntaxException等异常,避免程序因格式错误中断。 - 性能优化:大数据量时使用流式解析(如Jackson的
JsonParser),避免内存溢出。
通过以上方法,开发者可根据项目需求灵活选择JSON数组的接收方案,确保代码的简洁性、可维护性和高性能。

















