I have written a small add-on for inbuilt JSON Lib of Android (org.json.*). Android's in-build JSON library is very permeative and provides just the basic functionalities. There is no Tokenize functionality which can automatically convert a JSON string into its relevant Java Bean class.
Though there are few alternate open source libraries like jackson-json, gson etc. But the inbuilt JSON library of Android is pretty simple to use and with this add-on you'll be able to get the missing flavor of auto-bean conversion.
How to use it ?
Please download the JSONHandler.java and include in your Android project source code. It provides an important method parse() which can convert a JSON string into Java Bean class.
It uses Java re-factoring, so Bean class field name and JSON property name should exactly match. Let's look into how to parse a simple JSON structure-
String jsonString = "{name: 'Jon Smith', id: 1234, " +
"address: {cityName: 'San Diego', pinCode:345, latitude: 23.789, longitude: 78.965}," +
"}";
To parse above JSON structure you need to create a Bean class- Person.java having following properties and their Get/Set methods-
String name;
int id;
Address address;
As you can see Address is again a custom class- Address.java having following properties and their Get/Set methods-
String cityName;
int pinCode;
double latitude;
double longitude;
Once you define above 2 bean classes, you can use following piece of code to parse the JSON string into above bean class-
Person person = (Person)(new JSONHandler().parse(jsonString, Person.class, "com.prasanta"));
In the above code piece, "com.prasanta" is the name of base package under which Bean classes are defined.
Let's take an example where the JSON String itself is an Array-
String jsonString = "messages: [{id: 1, sub: 'Hi1', msg: 'I am here1'}, {id: 2, sub: 'Hi2', msg: 'I am here2'}]";
Above information represents an array of Message objects. Structure of Message.java (with Get/Set methods)-
int id;
String sub;
String msg;
JSONHandler.parse() method accepts only JSON Object and not JSONArray. So, we need to parse this array and pass individual JSON Object to the parse()-
JSONObject object = (JSONObject) new JSONTokener(json_resp.getResponseMessage()).nextValue();
JSONArray messages = object.getJSONArray("messages");
for(int i=0; i LT messages.length(); i++){
JSONObject message = messages.getJSONObject(i);
Message msg = (Message)new JSONHandler().parse(message.toString(), Message.class, "com.prasanta");
}
In the above code piece, "com.prasanta" is the name of base package under which Bean classes are defined.
So, how good is that :-) You can enhance the parsing logic as per your requirement.
Though there are few alternate open source libraries like jackson-json, gson etc. But the inbuilt JSON library of Android is pretty simple to use and with this add-on you'll be able to get the missing flavor of auto-bean conversion.
How to use it ?
Please download the JSONHandler.java and include in your Android project source code. It provides an important method parse() which can convert a JSON string into Java Bean class.
It uses Java re-factoring, so Bean class field name and JSON property name should exactly match. Let's look into how to parse a simple JSON structure-
String jsonString = "{name: 'Jon Smith', id: 1234, " +
"address: {cityName: 'San Diego', pinCode:345, latitude: 23.789, longitude: 78.965}," +
"}";
To parse above JSON structure you need to create a Bean class- Person.java having following properties and their Get/Set methods-
String name;
int id;
Address address;
As you can see Address is again a custom class- Address.java having following properties and their Get/Set methods-
String cityName;
int pinCode;
double latitude;
double longitude;
Once you define above 2 bean classes, you can use following piece of code to parse the JSON string into above bean class-
Person person = (Person)(new JSONHandler().parse(jsonString, Person.class, "com.prasanta"));
In the above code piece, "com.prasanta" is the name of base package under which Bean classes are defined.
Let's take an example where the JSON String itself is an Array-
String jsonString = "messages: [{id: 1, sub: 'Hi1', msg: 'I am here1'}, {id: 2, sub: 'Hi2', msg: 'I am here2'}]";
Above information represents an array of Message objects. Structure of Message.java (with Get/Set methods)-
int id;
String sub;
String msg;
JSONHandler.parse() method accepts only JSON Object and not JSONArray. So, we need to parse this array and pass individual JSON Object to the parse()-
JSONObject object = (JSONObject) new JSONTokener(json_resp.getResponseMessage()).nextValue();
JSONArray messages = object.getJSONArray("messages");
for(int i=0; i LT
JSONObject message = messages.getJSONObject(i);
Message msg = (Message)new JSONHandler().parse(message.toString(), Message.class, "com.prasanta");
}
In the above code piece, "com.prasanta" is the name of base package under which Bean classes are defined.
So, how good is that :-) You can enhance the parsing logic as per your requirement.