0

I m just parsing the datas from server which is in Json format. I got stucked. I don't know how to proceed further.

JSONObject object1 = new JSONObject(str);
String s1 = object1.getString("results");
JSONArray array1 = object1.getJSONArray("constituencies");

Is the above code right?

User1001
  • 23
  • 1
  • 8

2 Answers2

0

Have a look at to the following JSON Parsing code,

public class ParseJSON extends Activity {

/** Called when the activity is first created. */

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String readTwitterFeed = readTwitterFeed();
    try {
      JSONArray jsonArray = new JSONArray(readTwitterFeed);
      Log.i(ParseJSON.class.getName(),
          "Number of entries " + jsonArray.length());
      for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public String readTwitterFeed() {
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/vogella.json");
    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(ParseJSON.class.toString(), "Failed to download file");
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return builder.toString();
  }
} 

Writing JSON is very simple. Just create the JSONObject or JSONArray and use the toString() method.

public void writeJSON() {
  JSONObject object = new JSONObject();
  try {
    object.put("name", "Jack Hack");
    object.put("score", new Integer(200));
    object.put("current", new Double(152.32));
    object.put("nickname", "Hacker");
  } catch (JSONException e) {
    e.printStackTrace();
  }
  System.out.println(object);
}

Original Source.

Raynold
  • 443
  • 2
  • 9
  • 28
0

Above codes right or wrong??

So look at source:

{
   "results":{
      "constituencies":[

      ],
      "members":[
         {
            "constituency_name":"Beckenham",
            "member_name":"Bob Stewart",
            "member_party":"Conservative",
            "member_biography_url":"http://www.parliament.uk/biographies/commons/Bob-Stewart/3919",
            "member_website":"http://www.bobstewartmp.com/",
            "uri":"http://findyourmp.parliament.uk/constituencies/beckenham.json"
         },
         {
            "constituency_name":"Colchester",
            "member_name":"Sir Bob Russell",
            "member_party":"Liberal Democrat",
            "member_biography_url":"http://www.parliament.uk/biographies/commons/Sir-Bob-Russell/35",
            "member_website":"http://www.bobrussell.org.uk",
            "uri":"http://findyourmp.parliament.uk/constituencies/colchester.json"
         },
      ]
   }
}

Here you have two JSONObject:

  • First(whole source)
  • results

results contains(in this snippet of code) two JSONArrays:

  • constituencies(that is empty array)
  • members(it has two childs)

So you need to first fetch whole JSON then results and then you have access to arrays.

JSONObject root = new JSONObject(str); // whole source
JSONObject results = root.getJSONObject("results");

JSONArray constituenciesArr = results.getJSONArray("constituencies");
JSONArray membersArr = results.getJSONArray("members");
JSONObject child = null;
for (int i = 0; i < membersArr.length(); i++) {
   child = membersArr.getJSONObject(i);
   String mName = child.getString("member_name");
   ...

}
Simon Dorociak
  • 33,374
  • 10
  • 68
  • 106
  • I continued writing code after your suggestions.. It shows `The value of the local variable constituenciesArr is not used` and `The value of the local variable membersArr is not used`. check this http://pastebin.com/cMzZHzBW and parliament class http://pastebin.com/j2BVjDFk – User1001 Mar 29 '13 at 08:59
  • @User1001 this is not problem...only warning that you are not using constituenciesArr variable. You can for sure delete this line. It was only for imagination. – Simon Dorociak Mar 29 '13 at 09:05