我有一个问题,为我想要使用json解析的json创建映射.它非常具体,它关于一个带有json数组的json文件,其中有对象.
我的jsonfile像这样开始:
[
{
"venue": {
"venue_seasons": [
{
"created_at": "2011-12-25T23:00:28Z",
"updated_at": "2011-12-28T15:13:53Z",
"start_timestamp": 1293840000,
"id": 337,
"end": "2011-12-24T00:00:00Z",
"enabled": true,
"start": "2011-01-01T00:00:00Z",
"season_openings": [ … ],
"end_timestamp": 1324684800
},
{ … }
],
"address": "someadress",
"city": "cityname",
"name": "name",
"created_at": "2011-03-31T07:55:33Z",
etcetera
}
"venue":{another venue
Run Code Online (Sandbox Code Playgroud)
所以首先是一个数组,而不是一个包含大量对象的对象(场所)(我删除了大部分对象,因为这对我的问题并不重要),以及一些数组(如season_openings).
我的解析代码就是这样的,我使用gson.输入流工作正常.
Reader reader = new InputStreamReader(inputStream);
JsonResponse venueResponse = gson.fromJson(reader, JsonResponse.class);
List<Venues> results = venueResponse.venue;
Run Code Online (Sandbox Code Playgroud)
与JsonResponse类:
public class JsonResponse {
public List<Venues> venue;
}
Run Code Online (Sandbox Code Playgroud)
和Venues.class:
public class Venues {
public List<VenueSeasons> venue_seasons;
@SerializedName("adress")
public String getAdress;
@SerializedName("city")
public String getCity;
@SerializedName("country")
public String getCountry; etcetera
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我收到一个错误:
Unable to start activity ComponentInfo{com.hera.android.JSON/com.hera.android.JSON.TestParser2Activity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
Run Code Online (Sandbox Code Playgroud)
当然,我可以读取错误:它需要一个对象,但得到一个数组.我使用不同的jsonresponse.class变化很多,甚至将整个json数组放在一个json对象中(这不是一个真正的解决方案,因为我需要使用这种类型的jsonfile).但每次我得到这个或类似的错误.
我认为我接近解决方案,任何人都能看到我不能解决的问题,并帮助我吗?谢谢.
尝试这样调用 Gson:
List<Venues> venues = gson.fromJson(reader, new TypeToken<List<Venues>>() {}.getType());
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为您的 JSON 文档是一个List,而不是一个将列表作为其属性之一的对象。
| 归档时间: |
|
| 查看次数: |
5853 次 |
| 最近记录: |