I've a doubt that doesn't let me sleep! :D
I'm currently working with big json files, with many levels. I parse these object using the 'default' android way, so I read the response with a ByteArrayOutputStream, get a string and create a JSONObject from the string. All fine here.
Now, I've to parse the content of the json to get the objects of my interest, and I really can't find a better way that parse it manually, like this:
String status = jsonObject.getString("status");
Boolean isLogged = jsonObject.getBoolean("is_logged");
ArrayList<Genre> genresList = new ArrayList<Genre>();
// Get jsonObject with genres
JSONObject jObjGenres = jsonObject.getJSONObject("genres");
// Instantiate an iterator on jsonObject keys
Iterator<?> keys = jObjGenres.keys();
// Iterate on keys
while( keys.hasNext() ) {
String key = (String) keys.next();
JSONObject jObjGenre = jObjGenres.getJSONObject(key);
// Create genre object
Genre genre = new Genre(
jObjGenre.getInt("id_genre"),
jObjGenre.getString("string"),
jObjGenre.getString("icon")
);
genresList.add(genre);
}
// Get languages list
JSONObject jObjLanguages = jsonObject.getJSONObject("languages");
Iterator jLangKey = jObjLanguages.keys();
List<Language> langList = new ArrayList<Language>();
while (jLangKey.hasNext()) {
// Iterate on jlangKey obj
String key = (String) jLangKey.next();
JSONObject jCurrentLang = (JSONObject) jObjLanguages.get(key);
Language lang = new Language(
jCurrentLang.getString("id_lang"),
jCurrentLang.getString("name"),
jCurrentLang.getString("code"),
jCurrentLang.getString("active").equals("1")
);
langList.add(lang);
}
I think this is really ugly, frustrating, timewaster, and fragile.
I've seen parser like json-smart and Gson... but seems difficult to parse a json with many levels, and get the objects! But I guess that must be a better way...
Any idea? Every suggestion will be really appreciated.
Thanks in advance!