Search code examples
javajsonsimplejson

Trouble parsing a json array inside a json array


I am having trouble parsing a simple json in java. Here is the sample json.

[
  {
    "politics": [
      {
        "type": "admin2",
        "friendly_type": "country",
        "name": "United States",
        "code": "usa"
      },
      {
        "type": "admin6",
        "friendly_type": "county",
        "name": "Gratiot",
        "code": "26_057"
      },
      {
        "type": "constituency",
        "friendly_type": "constituency",
        "name": "Eighth district, MI",
        "code": "26_08"
      },
      {
        "type": "admin6",
        "friendly_type": "county",
        "name": "Clinton",
        "code": "26_037"
      },
      {
        "type": "admin4",
        "friendly_type": "state",
        "name": "Michigan",
        "code": "us26"
      },
      {
        "type": "constituency",
        "friendly_type": "constituency",
        "name": "Fourth district, MI",
        "code": "26_04"
      }
    ],
    "location": {
      "latitude": 43.111976,
      "longitude": -84.71275
    }
  }
]

Now this gives me the correct json index.

JSONParser parser = new JSONParser();
Object obj = parser.parse(output);
JSONArray array = (JSONArray)obj;
String jsonobj = array.get(0).toString();
{"politics":[{"code":"usa","name":"United States","type":"admin2","friendly_type":"country"},{"code":"26_057","name":"Gratiot","type":"admin6","friendly_type":"county"},{"code":"26_08","name":"Eighth district, MI","type":"constituency","friendly_type":"constituency"},{"code":"26_037","name":"Clinton","type":"admin6","friendly_type":"county"},{"code":"us26","name":"Michigan","type":"admin4","friendly_type":"state"},{"code":"26_04","name":"Fourth district, MI","type":"constituency","friendly_type":"constituency"}],"location":{"latitude":43.111976,"longitude":-84.71275}}

But I cant seem to get the attribute that I want from it.

JSONObject obj1 = new JSONObject(jsonobj);
String n = obj1.getString("admin4");
System.out.println(n);

All that I need from this json is the state which is Michigan. Where am I wrong? Help would be really appreciated.


Solution

  • First, array.get(0) will get you the first element from the main array. This first element is a JSON object that has two properties politics and location. You seem to be interested in a value that is inside the array value of the politics property. You'll have to use this ((JSONArray)((JSONObject)array.get(0)).get("politics")) to get that array.

    Second, admin4 is not a property it is actually a value of the type property. You'll have to loop through the array to find it.

    Here is a complete example:

    JSONParser parser = new JSONParser();
    Object obj = parser.parse(output);
    JSONArray array = (JSONArray)obj;
    JSONArray politics = ((JSONObject)array.get(0)).get("politics"));
    JSONObject obj = null;
    for(int i = 0; i < politics.size(); i++){
        if(((JSONObject)politics.get(i)).getString("type").equals("admin4")){
            obj = ((JSONObject)politics.get(i));
        }
    }
    if(obj != null){
        // Do something with the object.
    }
    

    It seems that you're using the simple json library. I don't remember exactly if it is .get("politics") or .getJSONObject("politics"). There may be other mistakes in method names in my example.