JSON数组与Java对象的基本概念
在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于前后端数据交互,JSON数组是由多个JSON对象组成的有序集合,每个JSON对象可以包含多个键值对,一个JSON数组可能如下所示:

[
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"},
{"name": "王五", "age": 28, "city": "广州"}
]
在Java中,通常使用第三方库(如Gson、Jackson或Fastjson)来解析和操作JSON数据,遍历JSON数组对象的属性值,核心在于将JSON数据转换为Java对象或集合,再通过循环访问每个对象的属性。
使用Gson库遍历JSON数组属性值
Gson是Google提供的开源JSON处理库,其简洁的API和高效的性能使其成为Java开发者的常用选择,以下是使用Gson遍历JSON数组属性值的详细步骤:
添加Gson依赖
在Maven项目的pom.xml中添加以下依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
解析JSON数组并遍历属性
假设上述JSON数据存储在字符串jsonArrayStr中,可以通过以下代码遍历每个对象的属性:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
public class GsonJsonTraversal {
public static void main(String[] args) {
String jsonArrayStr = "[" +
"{\"name\":\"张三\",\"age\":25,\"city\":\"北京\"}," +
"{\"name\":\"李四\",\"age\":30,\"city\":\"上海\"}," +
"{\"name\":\"王五\",\"age\":28,\"city\":\"广州\"}" +
"]";
Gson gson = new Gson();
// 将JSON数组转换为List<Map>对象
Type listType = new TypeToken<List<Map<String, Object>>>() {}.getType();
List<Map<String, Object>> list = gson.fromJson(jsonArrayStr, listType);
// 遍历List中的每个Map对象
for (Map<String, Object> map : list) {
System.out.println("遍历单个对象属性:");
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + ": " + value + " (类型: " + value.getClass().getSimpleName() + ")");
}
System.out.println("----------------------");
}
}
}
代码说明:

TypeToken用于获取泛型类型,确保gson.fromJson()能正确将JSON数组转换为List<Map<String, Object>>。- 外层循环遍历JSON数组中的每个对象(转换为Map),内层循环通过
entrySet()获取每个键值对。 value.getClass().getSimpleName()可输出属性值的实际类型(如String、Integer)。
使用Jackson库遍历JSON数组属性值
Jackson是另一个功能强大的JSON处理库,广泛应用于Spring框架中,其流式API和树模型提供了灵活的JSON操作方式,以下是使用Jackson遍历JSON数组属性的示例:
添加Jackson依赖
在pom.xml中添加:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
使用ObjectMapper解析并遍历
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class JacksonJsonTraversal {
public static void main(String[] args) throws Exception {
String jsonArrayStr = "[" +
"{\"name\":\"张三\",\"age\":25,\"city\":\"北京\"}," +
"{\"name\":\"李四\",\"age\":30,\"city\":\"上海\"}" +
"]";
ObjectMapper objectMapper = new ObjectMapper();
// 将JSON数组转换为List<Map>
List<Map<String, Object>> list = objectMapper.readValue(
jsonArrayStr,
new TypeReference<List<Map<String, Object>>>() {}
);
// 遍历属性
for (Map<String, Object> map : list) {
System.out.println("遍历单个对象属性:");
map.forEach((key, value) ->
System.out.println(key + ": " + value + " (类型: " + value.getClass().getSimpleName() + ")")
);
System.out.println("----------------------");
}
}
}
代码说明:
ObjectMapper是Jackson的核心类,用于JSON与Java对象的相互转换。TypeReference与Gson的TypeToken类似,用于处理泛型类型。forEach是Java 8的特性,简化了Map的遍历代码。
使用Fastjson库遍历JSON数组属性值
Fastjson是阿里巴巴开源的JSON库,以其解析速度快著称,以下是使用Fastjson遍历JSON数组的示例:
添加Fastjson依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
解析并遍历JSON数组
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
import java.util.Map;
public class FastjsonJsonTraversal {
public static void main(String[] args) {
String jsonArrayStr = "[" +
"{\"name\":\"张三\",\"age\":25,\"city\":\"北京\"}," +
"{\"name\":\"李四\",\"age\":30,\"city\":\"上海\"}" +
"]";
// 将JSON数组转换为List<Map>
List<Map<String, Object>> list = JSON.parseObject(
jsonArrayStr,
new TypeReference<List<Map<String, Object>>>() {}
);
// 遍历属性
for (Map<String, Object> map : list) {
System.out.println("遍历单个对象属性:");
for (String key : map.keySet()) {
Object value = map.get(key);
System.out.println(key + ": " + value + " (类型: " + value.getClass().getSimpleName() + ")");
}
System.out.println("----------------------");
}
}
}
代码说明:

- Fastjson的
JSON.parseObject()方法支持直接转换为复杂类型,结合TypeReference可处理泛型。 keySet()和get()方法配合使用,逐个获取属性键值对。
自定义JavaBean对象遍历属性
除了使用Map存储JSON数据,还可以将JSON对象映射到自定义的JavaBean类,通过反射或getter方法遍历属性,以下是示例:
定义JavaBean类
public class Person {
private String name;
private int age;
private String city;
// 必须提供无参构造方法
public Person() {}
// getter和setter方法
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; }
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + ", city='" + city + '\'' + '}';
}
}
使用Gson转换为List并遍历
Gson gson = new Gson();
Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> personList = gson.fromJson(jsonArrayStr, listType);
for (Person person : personList) {
System.out.println("遍历Person对象属性:");
// 通过反射获取所有字段
for (Field field : person.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = field.get(person);
System.out.println(field.getName() + ": " + value);
}
System.out.println("----------------------");
}
优势:使用JavaBean更符合面向对象思想,便于后续业务逻辑处理;反射方式可动态获取所有属性,无需硬编码字段名。
遍历JSON数组属性值的注意事项
- 数据类型处理:JSON中的数字类型可能是Integer或Long,需根据实际场景选择合适的Java类型(如
Long避免大数丢失)。 - 异常处理:JSON解析可能抛出
JsonSyntaxException或IOException,需添加try-catch块增强代码健壮性。 - 性能优化:对于大JSON数组,建议使用流式解析(如Jackson的
JsonParser)减少内存占用。 - 安全性:Fastjson存在已知漏洞(如1.2.68版本前),建议使用最新稳定版或替换为Gson/Jackson。
遍历JSON数组对象的属性值是Java开发中的常见需求,通过Gson、Jackson或Fastjson等库,可以高效实现JSON数据与Java对象的转换及属性访问,开发者可根据项目需求选择合适的库:Gson适合轻量级场景,Jackson功能全面且与Spring生态集成度高,Fastjson则以解析速度见长,自定义JavaBean结合反射的方式,为复杂业务场景提供了更灵活的解决方案,掌握这些方法,能显著提升处理JSON数据的效率与代码可维护性。


















