You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析新加坡taxi-availability API嵌套JSON获取coordinates数组

解决嵌套JSON中获取coordinates数组的问题

问题原因

你遇到的错误是因为obj.getJSONArray("features").get(0)返回的是Object类型,该类型没有getJSONObject方法,必须先强制转换为JSONObject才能继续调用后续方法。

方案1:修复现有org.json代码

如果继续使用你当前的JSONObject库(大概率是org.json),修改代码如下:

JSONArray features = obj.getJSONArray("features");
// 先把get(0)的结果强转为JSONObject
JSONObject firstFeature = (JSONObject) features.get(0);
JSONObject geometry = firstFeature.getJSONObject("geometry");
JSONArray coordinates = geometry.getJSONArray("coordinates");
// 现在coordinates就是你要的数组,可以遍历处理
for (int i = 0; i < coordinates.length(); i++) {
    JSONObject coord = coordinates.getJSONObject(i);
    // 处理单个坐标对象
}

方案2:使用更灵活的JSON库(推荐)

如果不想频繁强转,推荐使用Jackson或Gson,它们的API更友好,处理嵌套JSON更方便:

用Jackson的示例

  1. 先添加Jackson依赖(Maven):
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
  1. 解析代码:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

String uri = "https://api.data.gov.sg/v1/transport/taxi-availability";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(result);
// 直接链式导航,无需手动强转
JsonNode coordinates = root.path("features").get(0).path("geometry").path("coordinates");
// 遍历数组
for (JsonNode coord : coordinates) {
    // 处理每个坐标节点,比如获取经度纬度:
    double lon = coord.get(0).asDouble();
    double lat = coord.get(1).asDouble();
}

用Gson的示例

  1. 添加Gson依赖(Maven):
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
  1. 解析代码:
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

String uri = "https://api.data.gov.sg/v1/transport/taxi-availability";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

JsonObject root = JsonParser.parseString(result).getAsJsonObject();
JsonArray features = root.getAsJsonArray("features");
JsonObject firstFeature = features.get(0).getAsJsonObject();
JsonObject geometry = firstFeature.getAsJsonObject("geometry");
JsonArray coordinates = geometry.getAsJsonArray("coordinates");
// 遍历处理
for (int i = 0; i < coordinates.size(); i++) {
    JsonObject coord = coordinates.get(i).getAsJsonObject();
    // 处理逻辑
}

这两种库都不需要定义实体类,就能轻松处理嵌套JSON结构,比原始的org.json更省心。

内容的提问来源于stack exchange,提问作者jingwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:30:27