Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android的Gson_Java_Android_Json_Gson - Fatal编程技术网

Java Android的Gson

Java Android的Gson,java,android,json,gson,Java,Android,Json,Gson,我正在尝试使用Gson解析此JSON: { "status": "status", "lang": "lang", "guid": "guid", "name": "name", "tags": "tags", "address": "address", "description": "description", "size": "M", "url": "http:\/\/", "email": "mymail@my

我正在尝试使用Gson解析此JSON:

{
    "status": "status",
    "lang": "lang",
    "guid": "guid",
    "name": "name",
    "tags": "tags",
    "address": "address",
    "description": "description",
    "size": "M",
    "url": "http:\/\/",
    "email": "mymail@mysite.com",
    "fax": "",
    "tel": "000 000 00 00",
    "total_votes": "0",
    "total_value": "0",
    "rate": 5,
    "open2424": "0",
    "category_main_name": "category_main_name",
    "category_name": "category_name",
    "category_main_name2": "category_main_name2",
    "category_name2": "category_name2",
    "category_main_name3": "category_main_name3",
    "category_name3": "category_name3",
    "park_type": "park_type",
    "park_handicap": "0",
    "park_free": "1",
    "park_description": "",
    "datemodinfo": "2012-12-15 18:18:05",
    "sponsor": "2",
    "sponsorstart": "2012-12-16 13:38:51",
    "sponsorend": "2013-12-16 13:38:51",
    "zip": "zip",
    "town": "town",
    "area": "area",
    "latitude": "latitude",
    "longitude": "longitude",
    "distance_info": {
        "distance": 10,
        "unit": "unit"
    },
    "image": "image",
    "url": "url",
    "open": "1",
    "openinghours": [{
        "schedules": {
            "day0": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-12"
            },
            "day1": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-13"
            },
            "day2": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-14"
            },
            "day3": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-15"
            },
            "day4": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-16"
            },
            "day5": {
                "date": "2013-08-17"
            },
            "day6": {
                "date": "2013-08-18"
            }
        },
        "title": "title"
    }]
}
我用以下代码解析JSON:

Gson gson = new Gson();
new GsonBuilder().serializeNulls().create();
Reader reader = new InputStreamReader(source);
response = gson.fromJson(reader, ResponseShow.class);
这是我的
响应show
课程:

public class ResponseShow {

    @SerializedName("status")
    public String status;    
    @SerializedName("lang")
    public String lang;    
    @SerializedName("guid")
    public String guid;    
    @SerializedName("name")
    public String name;    
    @SerializedName("tags")
    public String tags;    
    @SerializedName("address")
    public String address;    
    @SerializedName("description")
    public String description;    
    @SerializedName("size")
    public String size;    
    @SerializedName("url")
    public String url;    
    @SerializedName("email")
    public String email;    
    @SerializedName("fax")
    public String fax;    
    @SerializedName("tel")
    public String tel;    
    @SerializedName("total_votes")
    public String total_votes;    
    @SerializedName("total_values")
    public String total_values;    
    @SerializedName("rate")
    public String rate;    
    @SerializedName("open2424")
    public String open2424;    
    @SerializedName("category_main_name")
    public String category_main_name;    
    @SerializedName("category_name")
    public String category_name;    
    @SerializedName("category_main_name2")
    public String category_main_name2;    
    @SerializedName("category_name2")
    public String category_name2;    
    @SerializedName("category_main_name3")
    public String category_main_name3;    
    @SerializedName("category_name3")
    public String category_name3;    
    @SerializedName("park_type")
    public String park_type;    
    @SerializedName("park_handicap")
    public String park_handicap;    
    @SerializedName("park_free")
    public String park_free;    
    @SerializedName("park_description")
    public String park_description;    
    @SerializedName("datemodinfo")
    public String datemodinfo;    
    @SerializedName("sponsor")
    public String sponsor;    
    @SerializedName("sponsorstart")
    public String sponsorstart;    
    @SerializedName("sponsorend")
    public String sponsorend;    
    @SerializedName("town")
    public String town;    
    @SerializedName("area")
    public String area;    
    @SerializedName("latitude")
    public String latitude;    
    @SerializedName("longitude")
    public String longitude;    
    @SerializedName("distance_info")
    public Map<String, String> distance_info = new HashMap<String, String>();    
    @SerializedName("zip")
    public String zip;    
    @SerializedName("image")
    public String image;    
    @SerializedName("ligoo_url")
    public String ligoo_url;    
    @SerializedName("open")
    public int open;    
    public List<openinghours> openinghours;    
    @SerializedName("query")
    public String query;
}
public class openinghours {

    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;

}
public class schedules {

    public List<day0> day0;
    public List<day1> day1;
    public List<day2> day2;
    public List<day3> day3;
    public List<day4> day4;
    public List<day5> day5;
    public List<day6> day6;
}
public class day0 {

    @SerializedName("date")
    public String date;         
    public List<periods> periods; 
}
public Map<String, Day> schedules;
这是我的
课程表
课程:

public class ResponseShow {

    @SerializedName("status")
    public String status;    
    @SerializedName("lang")
    public String lang;    
    @SerializedName("guid")
    public String guid;    
    @SerializedName("name")
    public String name;    
    @SerializedName("tags")
    public String tags;    
    @SerializedName("address")
    public String address;    
    @SerializedName("description")
    public String description;    
    @SerializedName("size")
    public String size;    
    @SerializedName("url")
    public String url;    
    @SerializedName("email")
    public String email;    
    @SerializedName("fax")
    public String fax;    
    @SerializedName("tel")
    public String tel;    
    @SerializedName("total_votes")
    public String total_votes;    
    @SerializedName("total_values")
    public String total_values;    
    @SerializedName("rate")
    public String rate;    
    @SerializedName("open2424")
    public String open2424;    
    @SerializedName("category_main_name")
    public String category_main_name;    
    @SerializedName("category_name")
    public String category_name;    
    @SerializedName("category_main_name2")
    public String category_main_name2;    
    @SerializedName("category_name2")
    public String category_name2;    
    @SerializedName("category_main_name3")
    public String category_main_name3;    
    @SerializedName("category_name3")
    public String category_name3;    
    @SerializedName("park_type")
    public String park_type;    
    @SerializedName("park_handicap")
    public String park_handicap;    
    @SerializedName("park_free")
    public String park_free;    
    @SerializedName("park_description")
    public String park_description;    
    @SerializedName("datemodinfo")
    public String datemodinfo;    
    @SerializedName("sponsor")
    public String sponsor;    
    @SerializedName("sponsorstart")
    public String sponsorstart;    
    @SerializedName("sponsorend")
    public String sponsorend;    
    @SerializedName("town")
    public String town;    
    @SerializedName("area")
    public String area;    
    @SerializedName("latitude")
    public String latitude;    
    @SerializedName("longitude")
    public String longitude;    
    @SerializedName("distance_info")
    public Map<String, String> distance_info = new HashMap<String, String>();    
    @SerializedName("zip")
    public String zip;    
    @SerializedName("image")
    public String image;    
    @SerializedName("ligoo_url")
    public String ligoo_url;    
    @SerializedName("open")
    public int open;    
    public List<openinghours> openinghours;    
    @SerializedName("query")
    public String query;
}
public class openinghours {

    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;

}
public class schedules {

    public List<day0> day0;
    public List<day1> day1;
    public List<day2> day2;
    public List<day3> day3;
    public List<day4> day4;
    public List<day5> day5;
    public List<day6> day6;
}
public class day0 {

    @SerializedName("date")
    public String date;         
    public List<periods> periods; 
}
public Map<String, Day> schedules;
问题是,我在尝试分析
day0
时遇到以下错误:

Error: java.lang.IllegalStateException: Expected BEGIN_ARRAY goal was BEGIN_OBJECT at line 1 column 2414

你的问题在类
openinghours
(顺便说一句,哪个应该是大写的!)。在这里,您试图将字段
“schedules”
解析为一个
列表
,正如您在JSON中看到的,它不是一个
列表
,而是一个对象(它被
{}
包围)

具体地说,
“schedules”
字段如下所示:

"schedules": {
    "day0": {
        ...
    },
    "day1": {
        ...
    },
    ...
}
因此,对于您来说,最快的解决方案就是将
openinghours
类中的属性
schedules
的类型替换为:

public schedules schedules;
因为JSON字段
“schedules”
是一个对象,它包含多个字段
day0
day1
,等等。。。而这正是你们班的课程安排。。。所以,这应该对你有用


无论如何,最好的解决方案是在
openinghours
类中使用
Map
this:

public class ResponseShow {

    @SerializedName("status")
    public String status;    
    @SerializedName("lang")
    public String lang;    
    @SerializedName("guid")
    public String guid;    
    @SerializedName("name")
    public String name;    
    @SerializedName("tags")
    public String tags;    
    @SerializedName("address")
    public String address;    
    @SerializedName("description")
    public String description;    
    @SerializedName("size")
    public String size;    
    @SerializedName("url")
    public String url;    
    @SerializedName("email")
    public String email;    
    @SerializedName("fax")
    public String fax;    
    @SerializedName("tel")
    public String tel;    
    @SerializedName("total_votes")
    public String total_votes;    
    @SerializedName("total_values")
    public String total_values;    
    @SerializedName("rate")
    public String rate;    
    @SerializedName("open2424")
    public String open2424;    
    @SerializedName("category_main_name")
    public String category_main_name;    
    @SerializedName("category_name")
    public String category_name;    
    @SerializedName("category_main_name2")
    public String category_main_name2;    
    @SerializedName("category_name2")
    public String category_name2;    
    @SerializedName("category_main_name3")
    public String category_main_name3;    
    @SerializedName("category_name3")
    public String category_name3;    
    @SerializedName("park_type")
    public String park_type;    
    @SerializedName("park_handicap")
    public String park_handicap;    
    @SerializedName("park_free")
    public String park_free;    
    @SerializedName("park_description")
    public String park_description;    
    @SerializedName("datemodinfo")
    public String datemodinfo;    
    @SerializedName("sponsor")
    public String sponsor;    
    @SerializedName("sponsorstart")
    public String sponsorstart;    
    @SerializedName("sponsorend")
    public String sponsorend;    
    @SerializedName("town")
    public String town;    
    @SerializedName("area")
    public String area;    
    @SerializedName("latitude")
    public String latitude;    
    @SerializedName("longitude")
    public String longitude;    
    @SerializedName("distance_info")
    public Map<String, String> distance_info = new HashMap<String, String>();    
    @SerializedName("zip")
    public String zip;    
    @SerializedName("image")
    public String image;    
    @SerializedName("ligoo_url")
    public String ligoo_url;    
    @SerializedName("open")
    public int open;    
    public List<openinghours> openinghours;    
    @SerializedName("query")
    public String query;
}
public class openinghours {

    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;

}
public class schedules {

    public List<day0> day0;
    public List<day1> day1;
    public List<day2> day2;
    public List<day3> day3;
    public List<day4> day4;
    public List<day5> day5;
    public List<day6> day6;
}
public class day0 {

    @SerializedName("date")
    public String date;         
    public List<periods> periods; 
}
public Map<String, Day> schedules;
公共地图时间表;
这是最好的选择,因为这正是JSON字段
“schedules”
所表示的。。。此外,通过这种方式,您只能有一个类
,而不是许多类
天0
天1
,等等。。。这就更有意义了

尝试替换

public class openinghours {
    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;
}
您可以为距离定义一个类。\u info():

//更改

@SerializedName("distance_info")
public Map<String, String> distance_info = new HashMap<String, String>();

也发布与解析相关的代码。问题涉及到那些代码。您提供的json有一个错误。它有一个结束']'但没有打开'['。这可能是一个复制粘贴错误,但也许你会添加第一个字符,以便更容易发现真正的问题。你的day0类是什么?即使你不需要为day0和其他几天创建不同的类,因为它只是更改了标签,否则所有的孩子都是一样的。我已经更改了问题…@Buchssullivan:让我再重复一遍如果你认为它是有效的和有用的,你可以接受这个答案…或者你可以随时评论如果你需要更多的帮助…