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

请求协助解析MBTA API返回的JSON数据,遇JSONException错误

解决MBTA API JSON解析失败的问题

嘿,我瞅了你遇到的JSON解析报错,问题其实挺明显的——从你贴的报错里的JSON片段就能看出来,你拿到的是不完整的JSON数据!你看最后那段:

"relationships":{"route":{"data":{"id":"..."}}]

这里的route的data对象没闭合(缺了}),整个relationships对象也没闭合,甚至外层的数组元素都没写完,自然会触发JSONException。

给你几个排查和解决的思路:

  • 先确认API返回的原始数据是否完整:直接把你调用的API地址在浏览器里打开,把返回的全部JSON复制到JSON校验工具里(随便找个靠谱的在线校验器就行),看看是不是本身就有格式问题。如果API返回的就是不完整的,那可能是API服务的临时问题,或者你请求参数有特殊情况导致截断;如果校验是有效的,那问题肯定出在你读取响应的代码里。

  • 检查代码读取响应的逻辑:大概率是你读取API响应的时候只拿了一部分数据就开始解析了。比如用Java的话,别用readLine()这种只读一行的方法(如果响应是多行的JSON),得确保把整个响应流都读完。举个简单的正确读取示例:

// 用HttpURLConnection读取完整响应的示例
URL apiUrl = new URL("https://api-v3.mbta.com/predictions?sort=arrival_time&filter[stop]=70028,70029");
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("GET");

// 读取全部响应字节并转成字符串
String fullJsonResponse = new String(connection.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
// 先打印出来确认是不是完整的JSON
System.out.println("完整响应内容:" + fullJsonResponse);

// 再进行解析
JSONArray predictionsArray = new JSONArray(fullJsonResponse);
  • 解析前先打印验证:不管用啥语言,解析之前一定要先把拿到的响应内容完整打印出来,这是快速定位问题的关键——如果打印出来的就是你报错里那段不完整的内容,那肯定是读取逻辑的问题;如果是完整的,再去排查解析代码的其他问题。

按照这个步骤走,应该很快就能解决你的JSON解析问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:09