This is a program that get asana json data using curl from url and then parse it. But When I run this program, error shows
java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray at jsontest.GetJsonDataAndParseIt.main(GetJsonDataAndParseIt.java:44)
Code File:
package jsontest;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class GetJsonDataAndParseIt {
public static void main (String args[]){
File workDir = new File("C:/cygwin64/bin");
try {
Runtime systemShell = Runtime.getRuntime();
String cmd = "curl -u 4cKDgv4O.L8Th7N8l7jADg3HRU44abmT:https://app.asana.com/api/1.0/tasks/26673876577868?opt_pretty";
cmd += " | grep 'OBJECT'";
Process shellOutput = systemShell.exec(workDir+"/"+cmd, null, workDir);
InputStreamReader isr = new InputStreamReader(shellOutput.getInputStream());
BufferedReader br = new BufferedReader (isr);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(br);
JSONArray dataArray= (JSONArray) jsonObject.get("data");
for(int i=0;i<dataArray.size();i++){
JSONObject dataObject = (JSONObject) dataArray.get(i);
long task_id = (long) dataObject.get("id");
System.out.println("Task id is: " + task_id);
String task_name = (String) dataObject.get("name");
System.out.println("Task name is: " + task_name);
String task_notes = (String) dataObject.get("notes");
System.out.println("Task Notes are: " + task_notes);
boolean task_completed_status = (boolean) dataObject.get("completed");
System.out.println("Task Completed status: " + task_completed_status);
String task_assignee_status = (String) dataObject.get("assignee_status");
System.out.println("Task Assignee status: " + task_assignee_status);
String completed_at = (String) dataObject.get("completed_at");
System.out.println("Task Completed at: " + completed_at);
String task_due_on = (String) dataObject.get("due_on");
System.out.println("Task due date: " + task_due_on);
String due_at = (String) dataObject.get("due_at");
System.out.println("Task due at: " + due_at);
JSONObject workspaceObj = (JSONObject) dataObject.get("workspace");
Long workspace_id = (Long) workspaceObj.get("id");
String workspace_name = (String) workspaceObj.get("name");
System.out.println("Workspace id " + workspace_id + " with workspace name " + workspace_name);
long task_number_of_hearts = (long) dataObject.get("num_hearts");
System.out.println("Task number of hearts: " + task_number_of_hearts);
String task_parent = (String) dataObject.get("parent");
System.out.println("Task parent: " + task_parent);
JSONArray task_hearts= (JSONArray) dataObject.get("hearts");
for (int z = 0; z < task_hearts.size(); z++) {
JSONObject task_hearts_object = (JSONObject) task_hearts.get(z);
Long task_hearts_id = (Long) task_hearts_object.get("id");
String task_hearts_name = (String) task_hearts_object.get("name");
System.out.println("Task hearts id " + task_hearts_id + " with Task hearts name " + task_hearts_name);
}
JSONArray task_tags= (JSONArray) dataObject.get("tags");
for (int z = 0; z < task_tags.size(); z++) {
JSONObject task_tags_object = (JSONObject) task_tags.get(z);
Long task_tags_id = (Long) task_tags_object.get("id");
String task_tags_name = (String) task_tags_object.get("name");
System.out.println("Task tags id " + task_tags_id + " with Task tags name " + task_tags_name);
}
boolean task_hearted = (boolean) dataObject.get("hearted");
System.out.println("Task hearted: " + task_hearted);
JSONArray task_projects= (JSONArray) dataObject.get("projects");
for (int z = 0; z < task_projects.size(); z++) {
JSONObject task_projects_object = (JSONObject) task_projects.get(z);
Long task_projects_id = (Long) task_projects_object.get("id");
String task_projects_name = (String) task_projects_object.get("name");
System.out.println("Task projects id " + task_projects_id + " with Task projects name " + task_projects_name);
}
JSONArray task_memberships= (JSONArray) dataObject.get("memberships");
for (int z = 0; z < task_memberships.size(); z++) {
JSONObject task_memberships_object = (JSONObject) task_memberships.get(z);
JSONObject task_memberships_section_object = (JSONObject) task_memberships_object.get("section");
if(task_memberships_section_object!=null){
Long task_memberships_section_id = (Long) task_memberships_section_object.get("id");
String task_memberships_section_name = (String) task_memberships_section_object.get("name");
System.out.println("Task memberships Section id " + task_memberships_section_id + " with Task memberships Section name " + task_memberships_section_name);
}
JSONObject task_memberships_project = (JSONObject) task_memberships_object.get("project");
Long task_memberships_project_id = (Long) task_memberships_project.get("id");
String task_memberships_project_name = (String) task_memberships_project.get("name");
System.out.println("Task memberships project id " + task_memberships_project_id + " with Task memberships project name " + task_memberships_project_name);
}
JSONObject task_assignee_object = (JSONObject) dataObject.get("assignee");
if(task_assignee_object!=null){
Long task_assignee_id = (Long) task_assignee_object.get("id");
String task_assignee_name = (String) task_assignee_object.get("name");
System.out.println("assignee id " + task_assignee_id + " with assignee name " + task_assignee_name);
}
JSONArray task_followers= (JSONArray) dataObject.get("followers");
for (int z = 0; z < task_followers.size(); z++) {
JSONObject task_followers_object = (JSONObject) task_followers.get(z);
Long task_followers_id = (Long) task_followers_object.get("id");
String task_followers_name = (String) task_followers_object.get("name");
System.out.println("followers id " + task_followers_id + " with followers name " + task_followers_name);
}
JSONArray task_subtasks= (JSONArray) dataObject.get("subtasks");
for(int j=0;j<task_subtasks.size();j++){
JSONObject sub_data_object = (JSONObject) task_subtasks.get(j);
//JSONObject innerObj = (JSONObject) m.get("project");
long sub_task_id = (long) sub_data_object.get("id");
System.out.println("Subtasks id is: " + sub_task_id);
String sub_task_name = (String) sub_data_object.get("name");
System.out.println("Subtasks task name is: " + sub_task_name);
String sub_task_notes = (String) sub_data_object.get("notes");
System.out.println("Subtasks notes are: " + sub_task_notes);
boolean sub_task_completed_status = (boolean) sub_data_object.get("completed");
System.out.println("Subtasks completed status: " + sub_task_completed_status);
String sub_task_assignee_status = (String) sub_data_object.get("assignee_status");
System.out.println("Subtasks assignee status: " + sub_task_assignee_status);
String sub_completed_at = (String) sub_data_object.get("completed_at");
System.out.println("Subtasks completed at: " + sub_completed_at);
String sub_task_due_on = (String) sub_data_object.get("due_on");
System.out.println("Subtasks due on: " + sub_task_due_on);
String sub_due_at = (String) sub_data_object.get("due_at");
System.out.println("Subtasks due at: " + sub_due_at);
JSONObject sub_workspace_object = (JSONObject) sub_data_object.get("workspace");
Long sub_workspace_id = (Long) sub_workspace_object.get("id");
String sub_workspace_name = (String) sub_workspace_object.get("name");
System.out.println("Subtasks workspace id " + sub_workspace_id + " with subtasks workspace name " + sub_workspace_name);
long sub_task_number_of_hearts = (long) sub_data_object.get("num_hearts");
System.out.println("Subtasks number of hearts: " + sub_task_number_of_hearts);
JSONObject sub_parent_object = (JSONObject) sub_data_object.get("parent");
Long sub_parent_id = (Long) sub_parent_object.get("id");
String sub_parent_name = (String) sub_parent_object.get("name");
System.out.println("Subtasks parent id " + sub_parent_id + " with Subtasks parent name " + sub_parent_name);
JSONArray sub_hearts= (JSONArray) sub_data_object.get("hearts");
for (int z = 0; z < sub_hearts.size(); z++) {
JSONObject sub_hearts_object = (JSONObject) sub_hearts.get(z);
Long sub_hearts_id = (Long) sub_hearts_object.get("id");
String sub_hearts_name = (String) sub_hearts_object.get("name");
System.out.println("Subtasks hearts id " + sub_hearts_id + "with Subtasks hearts name " + sub_hearts_name);
}
JSONArray sub_tags= (JSONArray) sub_data_object.get("tags");
for (int z = 0; z < sub_tags.size(); z++) {
JSONObject sub_tags_object = (JSONObject) sub_tags.get(z);
Long sub_tags_id = (Long) sub_tags_object.get("id");
String sub_tags_name = (String) sub_tags_object.get("name");
System.out.println("Subtasks tags id " + sub_tags_id + " with Subtasks tags name " + sub_tags_name);
}
boolean sub_task_hearted = (boolean) sub_data_object.get("hearted");
System.out.println("Subtasks hearted: " + sub_task_hearted);
JSONArray sub_projects= (JSONArray) sub_data_object.get("projects");
for (int z = 0; z < sub_projects.size(); z++) {
JSONObject sub_projects_object = (JSONObject) sub_projects.get(z);
Long sub_projects_id = (Long) sub_projects_object.get("id");
String sub_projects_name = (String) sub_projects_object.get("name");
System.out.println("Subtasks projects id " + sub_projects_id + " with Subtasks projects name " + sub_projects_name);
}
JSONArray sub_memberships= (JSONArray) sub_data_object.get("memberships");
if(sub_memberships!=null){
for (int z = 0; z < sub_memberships.size(); z++) {
JSONObject sub_memberships_object = (JSONObject) sub_memberships.get(z);
JSONObject sub_memberships_section_object = (JSONObject) sub_memberships_object.get("section");
Long sub_memberships_section_id = (Long) sub_memberships_section_object.get("id");
String sub_memberships_section_name = (String) sub_memberships_section_object.get("name");
System.out.println("Subtasks memberships section id " + sub_memberships_section_id + " with Subtasks memberships section name " + sub_memberships_section_name);
JSONObject sub_memberships_project_object = (JSONObject) sub_memberships_object.get("project");
Long sub_memberships_project_id = (Long) sub_memberships_project_object.get("id");
String sub_memberships_project_name = (String) sub_memberships_project_object.get("name");
System.out.println("Subtasks memberships project id " + sub_memberships_project_id + " with Subtasks memberships project name " + sub_memberships_project_name);
}
}
JSONObject sub_assignee_object = (JSONObject) sub_data_object.get("assignee");
if(sub_assignee_object!=null){
Long sub_assignee_id = (Long) sub_assignee_object.get("id");
String sub_assignee_name = (String) sub_assignee_object.get("name");
System.out.println("Subtasks assignee id " + sub_assignee_id + " with Subtasks assignee name " + sub_assignee_name);
}
JSONArray sub_followers= (JSONArray) sub_data_object.get("followers");
for (int z = 0; z < sub_followers.size(); z++) {
JSONObject sub_followers_object = (JSONObject) sub_followers.get(z);
Long sub_followers_id = (Long) sub_followers_object.get("id");
String sub_followers_name = (String) sub_followers_object.get("name");
System.out.println("Subtasks followers id " + sub_followers_id + " with Subtasks followers name " + sub_followers_name);
}}}
int exitVal = shellOutput.waitFor();
System.out.println("Process Exit Value : "+exitVal);
}catch (IOException ioe){
System.err.println(ioe);
}catch (Throwable t) {
t.printStackTrace();
}
}
}
Json File
{
"data": {
"id": 26673876577868,
"created_at": "2015-02-11T04:41:11.894Z",
"modified_at": "2015-02-16T06:40:27.611Z",
"name": "11g DB Stup",
"notes": "",
"completed": true,
"assignee_status": "inbox",
"completed_at": "2015-02-14T05:57:20.530Z",
"due_on": "2015-02-14",
"due_at": null,
"workspace": {
"id": 14810798216415,
"name": "crescentbahuman.com"
},
"num_hearts": 0,
"parent": null,
"hearts": [],
"assignee": null,
"tags": [],
"hearted": false,
"followers": [
{
"id": 14810783571926,
"name": "Asana Admin"
}
],
"projects": [
{
"id": 27017295312687,
"name": "B1 11g - KPIs Implmntn"
}
],
"memberships": [
{
"project": {
"id": 27017295312687,
"name": "B1 11g - KPIs Implmntn"
},
"section": null
}
]
}
}
In the JSON file that you have provided data
is a JSONObject
, not a JSONArray
, so this line probably throws the exception:
JSONArray dataArray= (JSONArray) jsonObject.get("data");
Simply change dateArray
to JSONObject (and also probably change its' name to dataObject
or something like that), and handle it as a key-value object, not an array.