Java遍历JSONArray的方法
在Java中遍历JSONArray有几种常见方法,以下是几种主要的实现方式:

使用org.json库
import org.json.JSONArray;
import org.json.JSONObject;
public class JsonArrayTraversal {
public static void main(String[] args) {
String jsonStr = "[{\"name\":\"John\", \"age\":30}, {\"name\":\"Alice\", \"age\":25}]";
JSONArray jsonArray = new JSONArray(jsonStr);
// 方法1:使用for循环遍历
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println("Name: " + jsonObject.getString("name"));
System.out.println("Age: " + jsonObject.getInt("age"));
}
// 方法2:使用增强for循环
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
System.out.println("Name: " + jsonObject.getString("name"));
System.out.println("Age: " + jsonObject.getInt("age"));
}
}
}
使用Gson库
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonJsonArrayTraversal {
public static void main(String[] args) {
String jsonStr = "[{\"name\":\"John\", \"age\":30}, {\"name\":\"Alice\", \"age\":25}]";
JsonArray jsonArray = JsonParser.parseString(jsonStr).getAsJsonArray();
// 方法1:使用迭代器
for (JsonElement element : jsonArray) {
JsonObject jsonObject = element.getAsJsonObject();
System.out.println("Name: " + jsonObject.get("name").getAsString());
System.out.println("Age: " + jsonObject.get("age").getAsInt());
}
// 方法2:使用传统for循环
for (int i = 0; i < jsonArray.size(); i++) {
JsonObject jsonObject = jsonArray.get(i).getAsJsonObject();
System.out.println("Name: " + jsonObject.get("name").getAsString());
System.out.println("Age: " + jsonObject.get("age").getAsInt());
}
}
}
使用Jackson库
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Iterator;
public class JacksonJsonArrayTraversal {
public static void main(String[] args) throws Exception {
String jsonStr = "[{\"name\":\"John\", \"age\":30}, {\"name\":\"Alice\", \"age\":25}]";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonArray = objectMapper.readTree(jsonStr);
// 方法1:使用迭代器
for (JsonNode node : jsonArray) {
System.out.println("Name: " + node.get("name").asText());
System.out.println("Age: " + node.get("age").asInt());
}
// 方法2:使用传统for循环
for (int i = 0; i < jsonArray.size(); i++) {
JsonNode node = jsonArray.get(i);
System.out.println("Name: " + node.get("name").asText());
System.out.println("Age: " + node.get("age").asInt());
}
}
}
使用Java 8 Stream API(适用于Jackson或Gson)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.stream.StreamSupport;
public class StreamJsonArrayTraversal {
public static void main(String[] args) throws Exception {
String jsonStr = "[{\"name\":\"John\", \"age\":30}, {\"name\":\"Alice\", \"age\":25}]";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonArray = objectMapper.readTree(jsonStr);
StreamSupport.stream(jsonArray.spliterator(), false)
.forEach(node -> {
System.out.println("Name: " + node.get("name").asText());
System.out.println("Age: " + node.get("age").asInt());
});
}
}
注意事项
- 异常处理:在实际应用中,应该添加适当的异常处理来处理JSON解析错误或字段缺失的情况
- 性能考虑:对于大型JSON数组,考虑使用流式处理或分块处理
- 库选择:根据项目需求选择合适的JSON库(org.json、Gson、Jackson等)
- 类型安全:在遍历过程中确保类型转换的正确性
方法可以根据你的具体需求和项目使用的JSON库来选择最适合的实现方式。

