I am trying to parse JSON to get few fields from it. Below is my JSON-
{
"id": "100000224942080000",
"name": "Tech Geeky",
"first_name": "Tech",
"last_name": "Geeky",
"link": "https://www.facebook.com/tech.geeky",
"username": "tech.geeky",
"work": [
{
"employer": {
"id": "1854993931353456",
"name": "Tech"
},
"location": {
"id": "1119482345542155151",
"name": "Santa Cruz, California"
},
"position": {
"id": "280794135283124256",
"name": "Senior"
},
"start_date": "2012-01"
}
],
"education": [
{
"school": {
"id": "131182196916370",
"name": "Fatima School, Gonda"
},
"year": {
"id": "113125125403208",
"name": "2004"
},
"type": "High School"
}
],
"gender": "male"
}
I need to extract id, name, first_name, last_name, gender from the above JSON. Below is my program that I wrote but it throws exception somehow. What wrong I am doing in that?
public class JSONParser {
private static final String URL = "https://graph.facebook.com/me?access_token=AAAG2HjMOAsEBAGBhjx2RqqLbOvnAZAxEPQ0X7ZC2JWY0YcQZDZDSSSAFTR";
private static HashMap<String, String> output = null;
public static void main(String[] args) throws Exception {
StringBuilder builder = new StringBuilder();
DefaultHttpClient httpclient = new DefaultHttpClient();
output = new HashMap<String, String>();
BufferedReader bufferedReader = null;
try {
HttpGet httpget = new HttpGet(URL);
httpget.getRequestLine();
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
//System.out.println(response.getStatusLine());
if (entity != null) {
InputStream inputStream = entity.getContent();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String line = null; (line = bufferedReader.readLine()) != null;) {
builder.append(line).append("\n");
}
JSONObject jsonObject = new JSONObject(builder.toString());
JSONObject info = jsonObject.getJSONObject("id");
parseJSONObject(info, output);
}
} catch (Exception e) {
} finally {
try {
bufferedReader.close();
httpclient.getConnectionManager().shutdown();
} catch (IOException e) {
}
}
}
private static HashMap<String, String> parseJSONObject(JSONObject json,
HashMap<String, String> output) throws JSONException {
Iterator<String> keys = json.keys();
while (keys.hasNext()) {
String key = keys.next();
String val = null;
try {
JSONObject value = json.getJSONObject(key);
parseJSONObject(value, output);
} catch (Exception e) {
val = json.getString(key);
}
if (val != null) {
output.put(key, val);
}
}
return output;
}
}
Exception:-
org.json.JSONException: JSONObject["id"] is not a JSONObject.
NOTE:-
JSON is correct. I have slightly modified JSON before posting it here. So it might be possible something gone wrong in copying pasting here. But assuming JSON is right.. Still it throws an exception.
You could get the fields by getting their data type values like this: