I am trying to parse a JSON into an Object. There are two classes: User and Profile. User got an instance of Profile.
So now there is one JSON to build an User Object. Inside this JSON are the attributes for the User and Profile listed and as you can see, Profile and User got both a HashMap called List. However i'd like to create the User and the Profile out of this Json, but i got this Exception:
//EDIT:
I removed the Map<String, String> links
from Profile and User. So now I do not get any errors and every User got a Profile - but I still need those Maps. Is it possible that GSON cant differentiate between the two lists ressources inside of the json because they have the same name?
//Dirty Hack Solution:
An ArrayList instead of the HashMap was no problem. However I decided to parse this part of the Json "by hand" to insert the Objects into my HashMap..
01-03 05:27:59.580: E/AndroidRuntime(4313): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 12
01-03 05:27:59.580: E/AndroidRuntime(4313): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:180)
User:
public class User {
private String username;
private String slug;
private String email;
private Boolean emailVerified;
private Profile profile;
Map<String, String> links;
public User()
{
this.username = null;
this.slug = null;
this.email = null;
this.emailVerified = null;
this.profile = null;
this.links = new HashMap<String, String>();
}
public String getUsername(){
return this.username;
}
public String getSlug(){
return this.slug;
}
public String getEmail(){
return this.email;
}
public Boolean getEmailVerified(){
return this.emailVerified;
}
public Profile getProfile(){
return this.profile;
}
}
Profile:
public class Profile {
private Map<String, String> links;
private String name;
private String description;
private String gender;
private String status;
private String timezone;
private Bitmap icon;
public Profile()
{
this.name = null;
this.description = null;
this.gender = null;
this.status = null;
this.timezone = null;
this.links = new HashMap<String, String>();
}
public String getName(){
return this.name;
}
public String getDescription(){
return this.description;
}
public String getGender(){
return this.gender;
}
public String getStatus(){
return this.status;
}
public String getTimezone(){
return this.timezone;
}
}
An example JSON:
{ "email" : "foo@bar.com",
"emailVerified" : true,
"links" : [ { "href" : "http://xxx.de/api/users/4f3a73004bb67751bc000011",
"rel" : "self"
},
{ "href" : "http://xxx.de:/api/users/4f3a73004bb67751bc000011/followers",
"rel" : "https://xxx.com/rels/collection/follower"
},
{ "href" : "http://xxx.de/api/users/4f3a73004bb67751bc000011/friends",
"rel" : "https://xxx.com/rels/collection/friend"
},
{ "href" : "http://xxx.de/api/users/4f3a73004bb67751bc000011/activity_stream",
"rel" : "https://xxx.com/rels/activity_stream"
}
],
"profile" : { "description" : "",
"gender" : "male",
"links" : [ { "href" : "xxx.de/uploads/profile_images/xxx.png",
"rel" : "https://xxx.com/rels/image"
},
{ "href" : "http://xxx.de/api/users/xxx/profile",
"rel" : "self"
}
],
"name" : "Foo Bar",
"status" : "Status",
"timezone" : "CET"
},
"slug" : "foobaar",
"username" : "foobaar"
}
Accessing Method:
public static User parseUser(String json) {
JSONObject jsonObject;
Gson gson = new Gson();
try {
jsonObject = new JSONObject(json);
Log.v(TAG,jsonObject.toString(2));
User u = gson.fromJson(jsonObject.toString(), User.class);
return u;
} catch (JSONException e){
Log.e(TAG, "There was an error parsing the JSON (USER)" + e);
}
return null;
}
Where is my mistake? And can i use a HashMap like this with GSON? Thanks in advance
See Question&Answers more detail:
os