请求协助解析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
相关产品推荐
相关产品推荐

