WordPress REST API嵌套JSON对象键值获取失败问题
嵌套JSON解析问题解决方案(WordPress REST API场景)
结构说明
待解析JSON特征:
- 最外层为JSON数组
- 数组内每一项是单条内容的JSON对象
- 目标字段
wp_GP_ID嵌套在内容对象下的x_metadata对象中
结构参考:
原错误代码运行报错:
错误原因
- 第一步直接将完整响应字符串转为
JSONObject,但响应最外层是数组,类型不匹配直接抛出异常 - 未逐层进入数组内的单条内容对象,直接从最外层取
x_metadata键,必然找不到对应值 - WordPress默认的自定义meta字段会以数组格式存储,直接调用
getString()取数组类型值会抛出类型转换异常
正确实现代码
使用org.json库的正确解析逻辑:
import org.json.JSONArray; import org.json.JSONObject; public class ParseWpResponse { public static void parse(String _response) { // 1. 先将响应转为最外层JSON数组 JSONArray postList = new JSONArray(_response); // 若确认接口只返回单条内容,可直接取索引0的对象,无需循环 JSONObject singlePost = postList.getJSONObject(0); // 2. 校验字段存在再取值,避免空指针 if (!singlePost.isNull("x_metadata")) { JSONObject metaObj = singlePost.getJSONObject("x_metadata"); String wpGpId; // 3. 兼容WordPress meta字段数组格式的情况 Object idVal = metaObj.get("wp_GP_ID"); if (idVal instanceof JSONArray) { wpGpId = ((JSONArray) idVal).getString(0); } else { wpGpId = idVal.toString(); } // 此处对wpGpId做后续业务处理即可 System.out.println("解析得到wp_GP_ID:" + wpGpId); } } }
排错提示
- 若提示找不到
x_metadata键,可先执行System.out.println(singlePost.keySet())打印单条对象下的所有键,确认字段实际层级,部分站点自定义字段会放在meta键下而非顶层 - 所有嵌套取值前都建议加
isNull()判断,避免接口返回字段缺失时程序崩溃 - 如果接口返回多条内容,把直接取索引0的逻辑换成循环遍历
postList即可
内容的提问来源于stack exchange,提问作者KingSolomon
相关产品推荐
相关产品推荐

