2015-05-15 60 views
0

我工作的Java解析器解析该体式JSON数据。现在我正在使用curl和curl执行 请求使用cygwin工具(用于在Windows上执行UNIX命令)。JAVA解析器“错误:把JSONObject不能转换为JSONArray”

现在我得到JSON格式单一项目的详细信息(包含在项目中的所有任务),从中我得到一个任务ID和使用此任务ID获取单个任务的细节。但是,当我解析子请求数据(请求获取单个任务的详细信息)。它给了我错误 “的JSONObject不能转换成JSONArray”。

误差线是

JSONArray dataArray2 =(JSONArray),其中jsonObject2.get( “数据”);

例体位JSON响应许多任务

{ 
    "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)" 
    } 
    ] 
} 

例体位单任务详细

{ 
    "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" 
     } 
    ] 
    } 
} 

例Java代码的

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(); 
} 
} 
} 
+1

这是正确的。 '单个任务细节'不是一个数组。这是一个JSON对象。 – Jens

+0

一个更方便的方式来获得JSON是使用[HttpClient的(https://hc.apache.org/httpcomponents-client-4.4.x/quickstart.html)也许[GSON](https://github.com/google/gson)将JSON响应转换为Java对象。 –

+0

@QueryLars是正确的.. –

回答

1

根据您必须使用getJSONArray()方法,而不是简单的get()docs

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

我希望修复您的错误。

+0

你指的是org.json的文档。但是这里用户正在使用simple-json。 'getJSONArray()'方法没有为simple-json定义。 –

+0

当我使用这个时找不到符号。 –

+0

@SachinGupta是对的。我重读了你正在使用'JSON.simple'。我建议使用我在解决方案中引用的库,因为您可以使用'Integer','String'或'Array'的特定方法,这使得您的代码更具可读性并提供了一种类型安全性。 – QueryLars

0

你应该做的铸造前添加一些积极的检查。

像:

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