Java JSONArray简介
JSONArray是Java中用于表示JSON数组的类,它属于org.json包,JSON数组是一种有序的值集合,可以包含不同类型的元素,如字符串、数字、布尔值、对象等,在处理JSON数据时,我们经常需要对JSON数组进行遍历操作,以便获取其中的数据。
遍历JSONArray的方法
1、使用for循环遍历
import org.json.JSONArray; import org.json.JSONObject; public class Main { public static void main(String[] args) { String jsonStr = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":20}]"; JSONArray jsonArray = new JSONArray(jsonStr); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); System.out.println("姓名:" + jsonObject.getString("name") + ",年龄:" + jsonObject.getInt("age")); } } }
2、使用增强型for循环遍历
import org.json.JSONArray; import org.json.JSONObject; public class Main { public static void main(String[] args) { String jsonStr = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age":20}]"; JSONArray jsonArray = new JSONArray(jsonStr); for (Object obj : jsonArray) { if (obj instanceof JSONObject) { JSONObject jsonObject = (JSONObject) obj; System.out.println("姓名:" + jsonObject.getString("name") + ",年龄:" + jsonObject.getInt("age")); } else if (obj instanceof JSONArray) { // 如果遇到嵌套的JSONArray,递归遍历 JSONArray nestedJsonArray = (JSONArray) obj; for (Object nestedObj : nestedJsonArray) { System.out.println(nestedObj); } } else { System.out.println(obj); } } } }
3、使用迭代器遍历(推荐)
import org.json.JSONArray; import org.json.JSONObject; import java.util.Iterator; import java.util.Map; import java.util.HashMap; import java.util.Map.Entry; public class Main { public static void main(String[] args) { String jsonStr = "[{\"name":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":20}]"; JSONArray jsonArray = new JSONArray(jsonStr); Iterator<Object> iterator = jsonArray.iterator(); while (iterator.hasNext()) { Object obj = iterator.next(); if (obj instanceof Map) { // 如果是JSONObject,可以直接获取键值对遍历 Map<String, Object> map = (Map<String, Object>) obj; for (Entry<String, Object> entry : map.entrySet()) { System.out.println("键:" + entry.getKey() + ",值:" + entry.getValue()); } } else if (obj instanceof JSONArray) { // 如果是JSONArray,递归遍历 JSONArray nestedJsonArray = (JSONArray) obj; for (Object nestedObj : nestedJsonArray) { System.out.println(nestedObj); } } else { // 其他类型直接输出即可 System.out.println(obj); } } } }
4、使用Java Stream API遍历(新特性)
import org.json.JSONArray; import org.json.JSONObject; import java.util.stream.StreamSupport; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.function.Function; import java.util.function.Supplier; import java.util.AbstractMap; // Java 8引入的新特性,用于将迭代器转换为流式API所需的Stream<T>类型参数,这里仅作演示用途,实际项目中可直接省略,具体用法可参考官方文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/package-summary.htmlStreamSupport%28java%3A%3AIterable%29%2C%20returns%20a%20stream%3B%20see%20also%20Collections%2E%3A%3Astream%28java%3A%3AIterable%29%29,此处代码已省略。// ... 其他代码与前述相同 ... // 在方法末尾调用list()方法将流转换为列表,然后进行遍历操作,注意:由于Java Stream API只能处理集合类型的对象,因此需要将迭代器转换为列表后再进行遍历,final List<JSONObject> list = StreamSupport.stream(((Iterable<Object>) jsonArray).spliterator(), false) // 将迭代器转换为流式API所需的Stream<T>类型参数,list().parallel().map(new Function<Object, Object>() { // 将每个元素转换为JSONObject类型 final Supplier<JSONObject> supplier = new Supplier<JSONObject>() { @Override public JSONObject get() throws Exception { return new JSONObject((Map<String, Object>) item); } }; return supplier;}).collect(Collectors.toList());// 将流转换为列表并进行遍历操作,for (JSONObject jsonObject : list) { System.out.println("姓名:" + jsonObject.getString("name") + ",年龄:" + jsonObject.getInt("age")); }// ... 其他代码与前述相同 ...// 在方法末尾调用list()方法将流转换为列表,然后进行遍历操作,final List<JSONObject> list = StreamSupport.stream(((Iterable<Object>) jsonArray).spliterator(), false) // 将迭代器转换为流式API所需的Stream<T>类型参数,list().parallel().map(new Function<Object, Object>() { // 将每个元素转换为JSONObject类型 final Supplier<JSONObject> supplier = new Supplier<JSONObject>() { @Override public JSONObject get() throws Exception { return new JSONObject((Map<String, Object>) item); } }; return supplier;}).collect(Collectors.toList());// 将流转换为列表并进行遍历操作,for (JSONObject jsonObject : list) { System.out.println("姓名:" + jsonObject.getString("name") + ",年龄:" + jsonObject.getInt("age")); }// ... 其他代码与前述相同 ...// 在方法末尾调用list()方法将流转换为列表,然后进行遍历操作,final List<JSONObject> list = StreamSupport.stream(((Iterable<Object>) jsonArray).spliterator(), false) // 将迭代器转换为流式API所需的Stream<T>类型参数,list().parallel().map(new Function<Object, Object>() { // 将每个元素转换为JSONObject类型 final Supplier<JSONObject> supplier = new Supplier<JSONObject>() { @Override public JSONObject get() throws Exception { return new JSONObject((Map<String, Object>) item); } }; return supplier;}).collect(Collectors.toList());// 将流转换为列表并进行遍历操作,for (JSONObject jsonObject : list) { System.out.println("姓名:" + jsonObject.getString("name") + ",年龄:" + jsonObject.getInt("age")); }// ... 其他代码与前述相同 ...// 在方法末尾调用list()方法将流转换为列表,然后进行遍历操作,final List<JSONObject> list = StreamSupport.stream(((Iterable<Object>) jsonArray).spliterator(), false) // 将迭代器转换为流式API所需的Stream<T]类型参数,list().parallel().map(new Function<Object, Object>() { // 将每个元素转换为JSONObject类型 final Supplier<JSONObject> supplier = new Supplier<JSONObject>() { @Override public JSONObject get() throws Exception { return new JSONObject((Map<String, Object>) item); } }; return supplier;}).collect(Collects
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/263120.html