未能反序列化JSON对象
我试图解析使用GSON以下JSON字符串在我的Android应用:未能反序列化JSON对象
{"Links":[{"Name":"Facebook","URL":"http://www.facebook.com/"},{"Name":"Twitter","URL":"http://twitter.com/"},{"Name":"Last FM","URL":"http://www.last.fm/"},{"Name":"Hyves","URL":"http://hyves.nl"},{"Name":"My Space","URL":"http://www.myspace.com/"},{"Name":"YouTube","URL":"http://www.youtube.com/"}]}
做这件事时,GSON给了我以下异常:
10-13 11:09:23.103: DEBUG/Error:(752): The JsonDeserializer [email protected]30 failed to deserialize json object
{"Links":[{"Name":"Facebook","URL":"http://www.facebook.com/"},{"Name":"Twitter","URL":"http://twitter.com/"},{"Name":"Last FM","URL":"http://www.last.fm/"},{"Name":"Hyves","URL":"http://hyves.nl"},{"Name":"My Space","URL":"http://www.myspace.com/"},{"Name":"YouTube","URL":"http://www.youtube.com/"}]}
given the type java.util.List<com.sander.app.json.links.Links>
现在我对JSON来说是一个完全新手,所以我很确定我必须做错什么。
我使用这个方法来解析我JSON:
WebService webService = new WebService("http://*********/GetLinksData");
//Pass the parameters
Map<String, String> params = new HashMap<String, String>();
params.put("iAppID", "59");
params.put("iFormID", "461");
//Get JSON response from server the "" are where the method name would normally go if needed example
// webService.webGet("getMoreAllerts", params);
String response = webService.webGet("", params);
System.out.println("Returns: "+response);
try
{
//Parse Response into our object
Type collectionType = new TypeToken<List<Links>>(){}.getType();
List<Links> alrt = new Gson().fromJson(response, collectionType);
}
catch(Exception e)
{
Log.d("Error: ", e.getMessage());
}
}
这是我的链接类:
public class Links {
public String Name;
public String URL;
public Links(String name, String URL){
this.Name = name;
this.URL = URL;
}
@Override
public String toString(){
return "Name: " + Name + "URL: " + URL;
}}
我怎么可能可以解决这个问题?我已经坚持了两天,即使我想学习如何自己解决这些问题,但我的选择已经不多了。
问候,
桑德
=================================== ================
与Raunak的帮助修正:
公共类LinkStorer { 公共链接,友情链接[];
public Link[] getLinks(){
return Links;
}
public Link getSingleLink(int i){
return Links[i];
}
public static class Link {
public String Name;
public String URL;
public String getName() {
return Name;
}
public String getURL() {
return URL;
}
}}
征集JSON对象:
LinkStorer collection = new Gson().fromJson(response, LinkStorer.class);
for(int i=0; i < collection.Links.length; i++){
System.out.println(collection.getSingleLink(i).getName());
您有关于制作的链接一个单独的类,但正确的观念,它应该是这个样子
public class Type {
public Link Links[];
public static class Link {
public String Name;
public String URL;
public String getName() {
return Name;
}
public String getURL() {
return URL;
}
}
}
然后,您可以将您的JSON字符串转换成Java对象是这样的:
Type collection = new Gson().fromJson(response, Type.class);
也许GSON
只能反序列化JSON
对象的标准Java类型?在你的情况下,它可能是一些像List<HashMap<String, List<String>>>
。一旦你有了这个,你可以迭代本地Java对象来生成你的自定义对象。
真的吗?因为我正在关注[本教程](http://www.josecgomez。com/2010/04/30/android-accessible-restfull-web-services-using-json /),它也使用自定义对象,并且工作得很好。 –
我不知道,这是一个很长的例子:)。 – SK9
也许这个问题,当你定义JSON输入的格式。您的程序需要以下JSON。
[{"Name":"Facebook","URL":"http://www.facebook.com/"},{"Name":"Twitter","URL":"http://twitter.com/"},{"Name":"Last FM","URL":"http://www.last.fm/"},{"Name":"Hyves","URL":"http://hyves.nl"},{"Name":"My Space","URL":"http://www.myspace.com/"},{"Name":"YouTube","URL":"http://www.youtube.com/"}]
尝试创建另一个POJO
public class LinksSearchResult {
private List<Links> links;
public List<Links> getLinks() {
return links;
}
}
而且使用fromJSON这样
LinksSearchResult链接=新GSON()fromJson(响应,collectionType)。
对不起,但在这一刻我无法正确地尝试这一点。
你,我的好人,是一个现场救星! 我的最终修复是在开始帖子中。 –
我的坏,一般来说还是新的。以为我点击它,但猜测我没有。不过谢谢你! –