如何获取嵌套JSONObject的值?请教contour_chin->x的取值方法
获取嵌套JSON中contour_chin的x值方法
没问题,我来帮你拆解这个嵌套JSON的取值逻辑,其实只要跟着层级一步步深入就能拿到目标值,我给你分步骤说明并附上代码示例:
先理清JSON的层级结构
你的JSON结构简化后是这样的:
{
"faces": [
{
"landmark": {
"contour_chin": { "y": 231, "x": 137 },
// 其他省略字段
}
}
],
// 其他顶层字段
}
核心层级路径:顶层对象 → faces数组(取第一个元素) → landmark对象 → contour_chin对象 → x字段
代码示例(以Java的org.json库为例)
这是后端/Android场景最常用的处理方式:
// 假设你的原始JSON字符串为jsonStr JSONObject rootObj = new JSONObject(jsonStr); // 1. 获取faces数组,取出第一个face对象(你的示例里只有一个face) JSONArray facesArray = rootObj.getJSONArray("faces"); JSONObject firstFace = facesArray.getJSONObject(0); // 2. 取出landmark嵌套对象 JSONObject landmarkObj = firstFace.getJSONObject("landmark"); // 3. 取出contour_chin对象,最后获取x值 JSONObject contourChin = landmarkObj.getJSONObject("contour_chin"); int chinX = contourChin.getInt("x"); // 输出结果,这里会打印137 System.out.println("contour_chin的x值:" + chinX);
安全取值(避免空指针/字段不存在异常)
如果担心数据可能存在缺失(比如faces数组为空、某个字段不存在),可以加判断逻辑:
if (rootObj.has("faces")) { JSONArray facesArray = rootObj.getJSONArray("faces"); if (!facesArray.isEmpty()) { JSONObject firstFace = facesArray.getJSONObject(0); if (firstFace.has("landmark")) { JSONObject landmarkObj = firstFace.getJSONObject("landmark"); if (landmarkObj.has("contour_chin")) { JSONObject contourChin = landmarkObj.getJSONObject("contour_chin"); if (contourChin.has("x")) { int chinX = contourChin.getInt("x"); System.out.println("contour_chin的x值:" + chinX); } } } } }
前端JavaScript场景示例
如果是前端处理这个JSON,写法更简洁:
// 假设已将JSON字符串解析为对象jsonData const chinX = jsonData.faces[0].landmark.contour_chin.x; console.log(chinX); // 输出137 // 安全取值(用可选链操作符,避免报错) const safeChinX = jsonData?.faces?.[0]?.landmark?.contour_chin?.x;
内容的提问来源于stack exchange,提问作者Park Soo Mi
相关产品推荐
相关产品推荐

