[
{
"name": "The Universe & The Earth"
, "imagename": "cat1.jpg"
, "active": "Y"
, "createdon": "1901-01-01"
, "lastmodifiedon": "1901-01-01 00:00:00"
, "description": "Knowledge of Earth location in the universe has been shaped by 400 years of telescopic observations, and has expanded radically in the last century.\n"
, "id": "1"
}
, {
"name": "Life on Earth"
, "imagename": "cat2.jpg"
, "active": "Y"
, "createdon": "1901-01-01"
, "lastmodifiedon": "1901-01-01 00:00:00"
, "description": "Over the last 3.7 billion years or so, living organisms on the Earth have diversified and adapted to almost every environment imaginable."
, "id": "2"
}
]
This is my json values. Now i want to parse and displayed in custom list view how can i
do this? I followed http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ this is link but can't be achieve. How can i do this? Can anybody tell me? Thanks in advance.
This is a JSONArray and not a JSONObject - to make a JSONObject from it, use
JSONObject jsonObject = jsonArray.getJSONObject(0);
this gets the first JSONObject from this JSONArray.
If you have multiple JSONObjects, use this:
JSONObject jsonObject;
for(int n = 0; n < jsonArray.length(); n++)
{
jsonObject = jsonArray.getJSONObject(n);
}
To get the values:
jsonObject.getString("name");
Try following code.
JSONArray jArr = new JSONArray(your_json_string);
for (int count = 0; count < jArr.length(); count++) {
JSONObject obj = jArr.getJSONObject(count);
String name = obj.getString("name");
String imageName = obj.getString("imagename");
//so on
}
First I created parser class JSONParser.java
package com.example.myparse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONArray jarray = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONArray getJSONFromUrl(String url) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e("==>", "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// try parse the string to a JSON object
try {
jarray = new JSONArray( builder.toString());
//System.out.println(""+jarray);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jarray;
}
}
Then create an object in main class like this....
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); // used to display in list view
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromUrl(url); // pass your ulr here
for(int i = 0; i <= json.length(); i++) // using for loop for parsing
{
try
{
JSONObject c = json.getJSONObject(i);
String name = c.getString(TAG_NAME);
String imagename = c.getString(TAG_IMAGENAME);
String active = c.getString(TAG_ACTIVE);
String createdon = c.getString(TAG_CREATEDON);
String lastmodifiedon = c.getString(TAG_LASTMODIFIEDON);
String description = c.getString(TAG_DESCRIPTION);
String id = c.getString(TAG_ID);
// If you want to show your parsed value in list view add the values into the array list
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_NAME, name);
map.put(TAG_IMAGENAME, imagename);
map.put(TAG_ACTIVE, active);
map.put(TAG_CREATEDON, createdon);
map.put(TAG_LASTMODIFIEDON, lastmodifiedon);
map.put(TAG_DESCRIPTION, description);
map.put(TAG_ID, id);
// adding HashList to ArrayList
contactList.add(map);
System.out.println("contactlist---->"+contactList);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
I did by this way. I got the proper output. All the best.
Check out GSON by Google. It lets you serialize/deserialize JSON in a super easy way - http://code.google.com/p/google-gson/
You can simply use Map to iterate through all the keys and values of JSONObject,
String jsonString = "[{\"name\":\"The Universe & The Earth\", \"imagename\":\"cat1.jpg\"}, {\"name\":\"Life on Earth\", \"imagename\":\"cat2.jpg\"}]";
JSONArray array;
try {
array = new JSONArray(jsonString);
JSONObject object;
Map<String,String> map;
for (int i = 0; i < array.length(); i++) {
object = new JSONObject(array.getJSONObject(i).toString());
map = new HashMap<String,String>();
Iterator<?> iter = object.keys();
while(iter.hasNext()){
String key = (String)iter.next();
String value = object.getString(key);
map.put(key,value);
}
System.out.println(map.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}