Java接收JSON数组的完整指南
在Java开发中,处理JSON数据是非常常见的任务,特别是接收和处理JSON数组,本文将详细介绍Java中接收JSON数组的多种方法,从基础到高级,帮助你这一重要技能。
使用原生JSON库
Java内置了javax.json包(Java EE)和org.json库(第三方库)来处理JSON数据。
使用org.json库
添加org.json依赖到你的项目中(Maven):
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
接收JSON数组的示例代码:
import org.json.JSONArray;
import org.json.JSONObject;
public class JsonArrayReceiver {
public static void main(String[] args) {
String jsonArrayString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 将字符串转换为JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);
// 遍历JSON数组
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println("姓名: " + name + ", 年龄: " + age);
}
}
}
使用Jackson库
Jackson是Java中最流行的JSON处理库之一,首先添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
接收JSON数组并转换为对象列表
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonJsonArrayReceiver {
public static void main(String[] args) throws Exception {
String jsonArrayString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
ObjectMapper objectMapper = new ObjectMapper();
// 将JSON数组转换为List<Person>
List<Person> personList = objectMapper.readValue(
jsonArrayString,
new TypeReference<List<Person>>() {}
);
// 遍历列表
for (Person person : personList) {
System.out.println("姓名: " + person.getName() + ", 年龄: " + person.getAge());
}
}
}
// Person类
class Person {
private String name;
private int age;
// getters和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库
Gson是Google开发的JSON处理库,添加依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
使用Gson接收JSON数组
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class GsonJsonArrayReceiver {
public static void main(String[] args) {
String jsonArrayString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
Gson gson = new Gson();
// 定义List<Person>的类型
Type personListType = new TypeToken<List<Person>>(){}.getType();
// 将JSON字符串转换为List<Person>
List<Person> personList = gson.fromJson(jsonArrayString, personListType);
// 遍历列表
for (Person person : personList) {
System.out.println("姓名: " + person.getName() + ", 年龄: " + person.getAge());
}
}
}
处理Spring Boot中的JSON数组
在Spring Boot应用中,接收HTTP请求中的JSON数组非常简单。
控制器接收JSON数组
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 PersonController {
@PostMapping("/persons")
public String savePersons(@RequestBody List<Person> persons) {
// 处理接收到的Person列表
for (Person person : persons) {
System.out.println("收到: " + person.getName());
}
return "成功接收 " + persons.size() + " 个Person对象";
}
}
高级技巧:处理嵌套JSON数组
当JSON数组包含嵌套结构时,可以定义相应的嵌套类来处理:
// 假设有如下JSON数组:
// [
// {
// "name": "张三",
// "addresses": [
// {"city": "北京", "street": "中关村"},
// {"city": "上海", "street": "南京路"}
// ]
// }
// ]
class PersonWithAddresses {
private String name;
private List<Address> addresses;
// getters和setters
}
class Address {
private String city;
private String street;
// getters和setters
}
// 使用Jackson处理
ObjectMapper mapper = new ObjectMapper();
List<PersonWithAddresses> persons = mapper.readValue(jsonString, new TypeReference<List<PersonWithAddresses>>(){});
错误处理
在实际应用中,处理JSON时可能会遇到各种错误:
try {
List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});
} catch (JsonParseException e) {
System.err.println("JSON格式错误: " + e.getMessage());
} catch (JsonMappingException e) {
System.err.println("JSON映射到对象失败: " + e.getMessage());
} catch (IOException e) {
System.err.println("IO异常: " + e.getMessage());
}
Java中接收JSON数组有多种方法选择:
- 原生JSON库:适合简单场景,但功能有限
- Jackson:功能强大,性能优秀,适合复杂场景
- Gson:API简洁,易于使用
- Spring Boot:简化了Web应用中的JSON处理
选择哪种方法取决于你的具体需求、项目复杂性和个人偏好,对于大多数现代Java项目,Jackson或Gson是更好的选择,而Spring Boot应用则可以直接利用框架内置的JSON处理能力。
通过这些技术,你将能够轻松地在Java应用中处理各种JSON数组数据。



还没有评论,来说两句吧...