我试图使用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作为响应。尽管问题看上去很简单,但我只是想知道我要去哪里。
答案 0 :(得分:0)
问题出在我的服务层中,我从没注意过:
@GET(endPoint)
Call<TimeSeriesStocks> getTimeSeries();
@GET(endPoint)
Call<Object> getTimeSeriesAsString();
因此,当我们调用getWeatherForUsersCitiesString()并执行response.body()。toString()时,就会导致此问题,而json字符串并不是gson所期望的。我在此答案中发布的代码是实际问题所在,而不是json的实际解析中。