Java开发中如何从嵌套JSON的指定数组仅获取首个元素值而非完整数组
问题核心原因
- 当前代码的错误点在于,
module1对象下键"1"对应的JSON值是数组结构,并非普通字符串 - 直接调用
contact.getString("1")时,JSON解析库会将整个数组对象序列化为字符串返回,最终输出的["OS", "Operating system"]就是序列化后的完整数组内容,没有拆分单个元素
具体修正方法
要拿到数组的第一个元素,需要两步操作:
- 先将键
"1"对应的内容按JSON数组类型读取,不要直接按字符串解析 - 从读取到的数组中,按照索引位置取对应的单个字符串元素,数组索引从0开始计数
- 核心替换代码片段:
// 读取"1"对应的JSON数组 JSONArray courseArray = contact.getJSONArray("1"); // 取数组索引0的元素,即需要的"OS"字符串 String targetCourseName = courseArray.getString(0);
修正后完整方法代码
private void addItemsFromJSON() { try { JSONObject jsonObject = new JSONObject(readJSONDataFromFile()); JSONArray coursea = jsonObject.getJSONArray("ict"); for (int i = 0; i < coursea.length(); i++) { JSONObject cc = coursea.getJSONObject(i); JSONObject contact = cc.getJSONObject("module1"); JSONArray courseArray = contact.getJSONArray("1"); String targetCourseName = courseArray.getString(0); courses.add(new course(targetCourseName, "", String.valueOf(content.get(ran.nextInt(content.size()))))); } } catch (JSONException | IOException e) { Log.d(TAG, "addItemsFromJSON: 777", e); } }
注意点
- 数组索引从0开始,传入索引
0取第一个元素"OS",如果传入索引1则会取到第二个元素"Operating system",可以根据实际需求调整 - 不要直接对数组类型的JSON值调用
getString方法,否则会触发序列化输出整个数组的问题
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

