7

I have the following JSON to represent the server response for a salt request:

{ "USER": { "E_MAIL":"email", "SALT":"salt" }, "CODE":"010" } 

And i tried to map it with the following POJO:

public class SaltPOJO { private String code = null; private User user = null; @Override public String toString() { return this.user.toString(); } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public class User { private String e_mail = null; private String salt = null; @Override public String toString() { return this.e_mail + ": " + this.salt; } public String getE_mail() { return e_mail; } public void setE_mail(String e_mail) { this.e_mail = e_mail; } public String getSalt() { return salt; } public void setSalt(String salt) { this.salt = salt; } } } 

Now everytime i do this:

Gson gson = new Gson(); SaltPOJO saltPojo = gson.fromJson(json.toString(), SaltPOJO.class); Log.v("Bla", saltPojo.toString()); 

The saltPojo.toString() is null. How can i map my JSON into POJO using Gson? Is the order of my variables important for the Gson mapping?

3
  • The order of fields doesn't matter, but names yes, you probably should take a look at the user guide Commented Nov 20, 2014 at 12:22
  • what is json? json.toString(), SaltPOJO.class here .?? Commented Nov 20, 2014 at 12:29
  • JSONObject json and SaltPOJO is the class i postet above. Commented Nov 20, 2014 at 12:30

2 Answers 2

17

Is the order of my variables important for the Gson mapping?

No, that's not the case.

How can i map my JSON into POJO using Gson?

It's Case Sensitive and the keys in JSON string should be same as variable names used in POJO class.

You can use @SerializedName annotation to use any variable name as your like.

Sample code:

 class SaltPOJO { @SerializedName("CODE") private String code = null; @SerializedName("USER") private User user = null; ... class User { @SerializedName("E_MAIL") private String e_mail = null; @SerializedName("SALT") private String salt = null; 
Sign up to request clarification or add additional context in comments.

Comments

0

You don't have proper mapping between your getter and setter. If you change your json to something like below, it would work:

{ "user": { "email":"email", "salt":"salt" }, "code":"010" } 

If you are getting json form third party then unfortunately, you would have to change your pojo or you could use adapter.

2 Comments

so it is case sensitive? that would be very bad because i cant change the json. the json is fix.
Yes it is! So go on and change the pojo :(

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.