使用Java 1.8的org.json库解析复杂JSON时触发JSONException
解决org.json.JSONException: JSONObject["productTypes"] not found异常
问题原因
你写的代码错误地直接从顶层JSONObject中获取productTypes字段,但根据提供的JSON结构,productTypes是嵌套在products对象内部的二级字段,直接获取必然找不到,触发JSONException。
修正后的代码
// 获取jsonString后 JSONObject topLevelJsonObject = (JSONObject) new JSONTokener(jsonString).nextValue(); // 第一步:先获取嵌套的products对象 JSONObject productsJsonObject = topLevelJsonObject.getJSONObject("products"); // 第二步:再从products中获取productTypes JSONObject productTypeJsonSection = productsJsonObject.getJSONObject("productTypes"); // 示例:继续解析内部字段 String storeId = productTypeJsonSection.getString("storeId");
额外优化建议
- 指定具体依赖版本:当前依赖中的
version是NOT_KNOWN,建议替换为稳定版本,比如Maven中央仓库最新稳定版:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20240303</version> </dependency>
- 使用安全解析方法:如果不确定字段是否存在,用
optJSONObject替代getJSONObject,字段不存在时返回null而非抛出异常:
JSONObject productsJsonObject = topLevelJsonObject.optJSONObject("products"); if (productsJsonObject != null) { JSONObject productTypeJsonSection = productsJsonObject.optJSONObject("productTypes"); // 后续业务逻辑 }
内容的提问来源于stack exchange,提问作者PacificNW_Lover
相关产品推荐
相关产品推荐

