Parsing Alpha Vantage API with Gson/Java



我试图使用gson解析json数据。当我尝试用GSON解析它时,我总是得到一个格式错误的JSON异常

com.google.gson.JsonSyntaxException: 
com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.Meta
at com.google.gson.Gson.fromJson(Gson.java:947)
at com.google.gson.Gson.fromJson(Gson.java:897)
at com.google.gson.Gson.fromJson(Gson.java:846)
at com.google.gson.Gson.fromJson(Gson.java:817)
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.Meta
at com.google.gson.Gson.fromJson(Gson.java:947)
at com.google.gson.Gson.fromJson(Gson.java:897)
at com.google.gson.Gson.fromJson(Gson.java:846)
at com.google.gson.Gson.fromJson(Gson.java:817)

以下是原始响应的片段:

{
"Meta Data": {
"1. Information": "Intraday (5min) open, high, low, close prices and volume",
"2. Symbol": "IBM",
"3. Last Refreshed": "2020-08-28 17:00:00",
"4. Interval": "5min",
"5. Output Size": "Compact",
"6. Time Zone": "US/Eastern"
},
"Time Series (5min)": {
"2020-08-28 17:00:00": {
"1. open": "125.3000",
"2. high": "125.3000",
"3. low": "125.3000",
"4. close": "125.3000",
"5. volume": "703"
},
"2020-08-28 16:55:00": {
"1. open": "125.3500",
"2. high": "125.3500",
"3. low": "125.3000",
"4. close": "125.3000",
"5. volume": "672"
},
.....
.....
.....
}
}

虽然我可以在没有gson的情况下解析json,但我只是想了解我在这里做错了什么。

这是它崩溃的地方:

TimeSeriesStocks tSeries = new Gson().fromJson(stringResponse, TimeSeriesStocks.class);

其中

stringResponse = response.body().toString()

response.body((是我从api中得到的响应。我可以看出反应很好。

这是TimeSeriesStocks类:

public class TimeSeriesStocks {
@SerializedName("Meta Data")
public LinkedTreeMap<String, LinkedTreeMap<String, String>> metaData;
@SerializedName("Time Series (5min)")
public LinkedTreeMap<String, LinkedTreeMap<String, String>> timeSeriesMap;
}

我尝试添加LinkedTreeMap作为类型标记,但我得到了相同的异常。我也尝试使用普通的自定义对象,但response.body((用于抛出服务器正在发送LinkedTreeMap作为响应的错误。虽然这个问题看起来很简单,但我只是想知道我哪里出了问题。

问题出在我的服务层,我从未注意到:

@GET(endPoint)
Call<TimeSeriesStocks> getTimeSeries();
@GET(endPoint)
Call<Object> getTimeSeriesAsString();

因此,当我们调用getWeatherForUsersCitiesString((并执行response.body((.toString((时,导致了这个问题,而json字符串不是gson所期望的。我在这个答案中发布的代码是实际问题所在,而不是json的实际解析。

最新更新