简体   繁体   中英

JAVA parser for asana json data “Error:JSONObject cannot be converted to JSONArray”

I am working on java parser that parse asana json data. Now I am executing request using curl and curl use cygwin tool(Used to execute UNIX commands on windows).

Now I am getting single project details in json format(that contain all tasks in projects) from which I am getting one task ID and use this task ID to get single task details. But when I am parse subrequest data(request to get single task detail). It gives me error " JSONObject cannot be converted into JSONArray ".

error line is

JSONArray dataArray2= (JSONArray)jsonObject2.get("data");

Example Asana JSON Response many tasks

{
  "data": [
    {
      "id": 23097910271884,
      "name": "Asana Prtl Rprtng Intgrtn R&D"
    },
    {
      "id": 30483134480109,
      "name": "Curl Training"
    },
    {
      "id": 30483134480115,
      "name": "Database Design"
    },
    {
      "id": 31806291283828,
      "name": "JSON Parser Setup"
        },
    {
      "id": 31806291283832,
      "name": "JDB Connectivity and Setup"
    },
    {
      "id": 30483134480118,
      "name": "Java Utility Development"
    },
    {
      "id": 31806291283837,
      "name": "Data Synchronization Testing"
    },
    {
      "id": 31806291283841,
      "name": "Bug Fixes"
    },
    {
      "id": 30483134480171,
      "name": "Portal Test Report Development (1)"
    }
  ]
}

Example Asana single task detail

{
  "data": {
    "id": 23097910271884,
    "created_at": "2014-12-30T06:35:11.959Z",
    "modified_at": "2015-05-12T07:19:02.589Z",
    "name": "Asana Prtl Rprtng Intgrtn R&D",
    "notes": "",
    "completed": true,
    "assignee_status": "inbox",
    "completed_at": "2015-05-12T07:20:29.181Z",
    "due_on": "2015-04-01",
    "due_at": null,
    "workspace": {
      "id": 14810798216415,
      "name": "crescentbahuman.com"
    },
    "num_hearts":2,
    "parent": null,
    "tags": [
    {
        "id": 17129100409445,
        "name": "IT"
      }
    ],
    "projects": [
      {
        "id": 30483134480107,
        "name": "Asana Integrations"
      }
    ],
    "hearted": true,
    "memberships": [
      {
        "project": {
          "id": 30483134480107,
          "name": "Asana Integrations"
        },
        "section": null
      }
    ],
    "assignee": {
      "id": 22273357407644,
      "name": "Abdul Majid bajwa"
    },
    "hearts": [
      {
        "id": 33739876272211,
        "user": {
          "id": 22273357407644,
          "name": "Abdul Majid bajwa"
        }
      },
      {
        "id": 33740502736864,
        "user": {
          "id": 14810783571926,
          "name": "Asana Admin"
        }
      }
    ],
    "followers": [
      {
        "id": 14810783571926,
        "name": "Asana Admin"
      },
      {
        "id": 22273357407644,
        "name": "Abdul Majid bajwa"
      }
    ]
  }
}

Example Java Code

package AllJsonClasses;


import java.io.*;
import java.lang.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class asanaData {

public static void main (String args[]){
File workDir = new File("C:/cygwin64/bin");
try {
Runtime systemShell = Runtime.getRuntime();
String urlRequest="curl -u 6k8mJNVi.o6S1DQBGT1AIESl4KQsqb0G:   https://app.asana.com/api/1.0/projects/30483134480107/tasks?opt_pretty";

String cmd = urlRequest;
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("project id is: " + task_id);

        try {
        File workDir2 = new File("C:/cygwin64/bin");
        Runtime systemShell2 = Runtime.getRuntime();
        String curlRequest2="curl -u 6k8mJNVi.o6S1DQBGT1AIESl4KQsqb0G: https://app.asana.com/api/1.0/tasks/"+task_id+"?opt_pretty";
        System.out.println();


        String cmd2 = curlRequest2;
        cmd2 += " | grep 'OBJECT'"; 
        Process shellOutput2 = systemShell2.exec(workDir2+"/"+cmd2, null, workDir2);
        InputStreamReader isr2 = new InputStreamReader(shellOutput2.getInputStream());  
        BufferedReader br2 = new BufferedReader (isr2);
        JSONParser jsonParser2 = new JSONParser();
        JSONObject jsonObject2 = (JSONObject) jsonParser2.parse(br2);



        JSONArray dataArray2= (JSONArray)jsonObject2.get("data");
        for(int i2=0;i<dataArray2.size();i2++){         
        JSONObject dataObject2 = (JSONObject) dataArray2.get(i2);



        long task_id2 =  (long) dataObject2.get("id");
        System.out.println("Task id is: " + task_id2);

        String task_created_at_dt2 = (String) dataObject2.get("created_at");
        System.out.println("The task created at is: " + task_created_at_dt2);

        String task_modified_at_dt2 = (String) dataObject2.get("modified_at");
        System.out.println("The task modified at is: " + task_modified_at_dt2);


        String task_name = (String) dataObject2.get("name");
        System.out.println("Task name is: " + task_name);

        String task_notes = (String) dataObject2.get("notes");
        System.out.println("Task Notes are: " + task_notes);

        boolean task_completed_status = (boolean) dataObject2.get("completed");
        System.out.println("Task Completed status: " + task_completed_status);

        String task_assignee_status = (String) dataObject2.get("assignee_status");
        System.out.println("Task Assignee status: " + task_assignee_status);

        String completed_at = (String) dataObject2.get("completed_at");
        System.out.println("Task Completed at: " + completed_at);

        String task_due_on = (String) dataObject2.get("due_on");
        System.out.println("Task due date: " + task_due_on);

        String due_at = (String) dataObject2.get("due_at");
        System.out.println("Task due at: " + due_at);

        JSONObject workspaceObj = (JSONObject) dataObject2.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) dataObject2.get("num_hearts");
        System.out.println("Task number of hearts: " + task_number_of_hearts);

        String task_parent = (String) dataObject2.get("parent");
        System.out.println("Task parent: " + task_parent);

        JSONArray task_hearts= (JSONArray) dataObject2.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) dataObject2.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) dataObject2.get("hearted");
        System.out.println("Task hearted: " + task_hearted);

        JSONArray task_projects= (JSONArray) dataObject2.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) dataObject2.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) dataObject2.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) dataObject2.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) dataObject2.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);

        }}}
        }catch (IOException ioe){
System.err.println(ioe);
}catch (Throwable t) {
t.printStackTrace();
}     
        String task_name = (String) dataObject.get("name");
        System.out.println("project name is: " + task_name);

        }


int exitVal = shellOutput.waitFor();
System.out.println("Process Exit Value : "+exitVal);
}catch (IOException ioe){
System.err.println(ioe);
}catch (Throwable t) {
t.printStackTrace();
}
}
}

According to the docs you have to use the getJSONArray() method instead of simple get() :

JSONArray dataArray2 = jsonObject2.getJSONArray("data");

I hope that fixes your error.

You should add some proactive-checks before doing casting.

Like :

Object dataArray2 =  jsonObject2.get("data");
if(dataArray2 instanceof JSONArray){
JSONArray jsonArray=(JSONArray)dataArray2;
}
else if(dataArray2 instanceof JSONObject){
JSONObject jsonObject3=(JSONObject)dataArray2;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM