I am using GSON to decode JSON strings that are returned from our server. I haven’t had any problems, until I ran into this one particular JSON return from the API. The return is in the following format:
“success”:1,”errors”:[],”data”:{“524”:{“id”:”524″}, “525”:{“id”:”525″}}
For the other returns I had data as an array of a class of my own creation, but for this return it says that it is an object and not an array. So how should I format my class?
***edit: What I am having trouble with is that the ‘524’ and ‘525’ fields are not static names. They are dependent on what the user’s credentials are. There could be fields 323, 324, 325 or a single one 123. It all depends. How would I be able to handle this dynamically?
SOLVED*
What I had to was make ‘data’ a <String, Object> hashmap in my custom class. Then after the first decoding, I turned ‘data’ into an array of type Object []. Then for each Object[i], I converted it into a JSON string. After that I used gson.fromJson() to convert it into what I had originally intended for it to be.
If the API is giving inconsistent results and you can’t find a reason on your end why it is doing so, one option is to parse the object into a GSON
JSONObject o = gson.fromJson(String)and then convert the data to a list if it is not one already by doingo.getElement("data").isList(), etc..When this is complete, you can then create the object via
gson.fromJson(JSONObject,Class). The alternative is to have two classes, one for each instance, but this seems sloppy if this is the only reason to have two different classes.