Java中如何从JSONObject对象获取内部JSON数组元素
获取JSONObject中指定数组的实现方法
基于你当前使用的org.json.simple库实现
org.json.simple中JSON数组对应的类型是JSONArray,在你现有解析代码的基础上,直接取出firstNames字段强转即可,完整示例代码:
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.List; public class ReadFirstNameArray { public static void main(String[] args) throws Exception { String firstNamesPath = "你的JSON文件实际存储路径"; JSONParser jsonParser = new JSONParser(); JSONObject firstObject = (JSONObject) jsonParser.parse(new FileReader(firstNamesPath)); // 取出数组字段 JSONArray rawNameArray = (JSONArray) firstObject.get("firstNames"); // 如需转为普通Java字符串列表,可遍历转换 List<String> firstNames = new ArrayList<>(); for (Object nameItem : rawNameArray) { firstNames.add((String) nameItem); } // 验证输出结果 System.out.println(firstNames); } }
注意:org.json.simple所有字段取值返回都是Object类型,没有泛型校验,手动强转时如果字段类型和预期不符会直接抛出类型转换异常,目前不属于生产环境推荐的JSON处理类库。
替换为更稳定的JSON库实现(可选)
如果可以更换依赖,优先选择带泛型校验、类型自动转换的成熟JSON库,以常用的Jackson为例,不需要手动强转,代码容错性更高,示例代码:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.util.List; public class ReadFirstNameArrayWithJackson { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); JsonNode root = objectMapper.readTree(new File("你的JSON文件实际存储路径")); // 直接读取数组并转换为Java字符串列表 List<String> firstNames = objectMapper.convertValue( root.get("firstNames"), objectMapper.getTypeFactory().constructCollectionType(List.class, String.class) ); System.out.println(firstNames); } }
两种写法运行后都可以直接拿到["Aaron", "Abigail", "Albert", "Bob"]的读取结果。
内容的提问来源于stack exchange,提问作者cantcode4mylife
相关产品推荐
相关产品推荐

