Java解析JSON提取rating字段存入ArrayList并排序的实现方法
实现思路
你的现有代码仅遍历了JSON最外层的键,而目标rating字段嵌套在reviews对应的数组元素中,正确提取逻辑如下:
- 从解析得到的顶层JSONObject中,直接获取
reviews键对应的JSONArray对象 - 遍历JSONArray中的每一个元素,将其强转为JSONObject类型
- 从每个子JSONObject中提取
rating字段的值,存入ArrayList - 最后调用排序方法完成排序
循环方案选择
两种方式都可以实现需求:
- 如果仅做提取操作,for each循环代码更简洁,可读性更高,优先选择
- 如果遍历过程中需要删除元素,再使用Iterator
你当前的场景直接用for each循环即可。
完整代码示例
这里基于你使用的json-simple库编写,直接替换你的原有逻辑即可:
import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; public class GetPair { public static void main(String[] args) throws Exception { ArrayList<Integer> ratingList = new ArrayList<>(); // 解析JSON文件 Object obj = new JSONParser().parse(new FileReader("C:\\Users\\User\\eclipse-workspace\\Task\\files\\reviews.json")); JSONObject topJson = (JSONObject) obj; // 获取reviews数组 JSONArray reviewsArr = (JSONArray) topJson.get("reviews"); // 遍历数组提取rating for (Object reviewObj : reviewsArr) { JSONObject reviewJson = (JSONObject) reviewObj; // json-simple默认数值解析为Long,手动转为Integer Integer rating = ((Long) reviewJson.get("rating")).intValue(); ratingList.add(rating); } // 升序排序,需要降序可额外调用Collections.reverse(ratingList) Collections.sort(ratingList); // 输出验证结果 System.out.println("排序后的rating列表:" + ratingList); } }
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

