如何提取JSON文件中方括号数组的值?现有代码无法生效
如何正确从JSON对象中提取数组值
你的代码问题出在直接用数组名称创建JSONArray实例——实际上,你要提取的数组是嵌套在一个JSON对象里的,不是独立的JSON数组字符串。我们需要先解析整个JSON对象,再从中取出目标数组。
问题分析
你给出的JSON格式是:
{"name_of_the_array": ["value_1", "value_2"]}
这是一个包含数组的JSON对象,而不是一个单独的JSON数组。你的原代码把"array_name"(数组的键名)传入JSONArray构造函数,这相当于尝试把字符串"array_name"解析成JSON数组,显然会报错,因为它不符合JSON数组的格式要求(JSON数组必须以[开头、]结尾)。
修正后的代码
下面是可以正常运行的代码,包含完整的解析和遍历逻辑:
import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public class JsonArrayExtractor { public static void main(String[] args) { // 假设你的JSON字符串是这样的 String jsonString = "{\"name_of_the_array\": [\"value_1\", \"value_2\"]}"; List<String> list = new ArrayList<>(); try { // 1. 先将JSON字符串解析为JSONObject JSONObject jsonObject = new JSONObject(jsonString); // 2. 从JSONObject中获取指定键对应的JSONArray JSONArray array = jsonObject.getJSONArray("name_of_the_array"); // 3. 遍历数组,将元素添加到list中 for (int i = 0; i < array.length(); i++) { String str = array.getString(i); // 推荐用getString直接获取字符串,避免类型转换问题 list.add(str); } // 打印结果验证 System.out.println("提取到的数组元素:" + list); } catch (Exception e) { e.printStackTrace(); } } }
关键注意点
- 必须先解析整个JSON对象,再通过键名获取对应的数组
- 遍历数组时,优先使用
getString(i)而不是get(i).toString(),这样可以避免如果元素不是字符串类型时出现的转换问题 - 记得捕获
JSONException(或者直接捕获Exception),因为JSON解析过程中可能会出现格式错误、键名不存在等问题
内容的提问来源于stack exchange,提问作者Ido G Zisman
相关产品推荐
相关产品推荐

