我正在研究解析asana json数据的java解析器。现在我在执行使用curl请求和curl使用cygwin工具(用于在windows上执行UNIX命令)。
现在我正在获得json格式的单个项目详细信息(包含项目中的所有任务),从中我获得一个任务ID并使用此任务ID获取单个任务详细信息。但是当我解析子请求数据时(请求获得单个任务细节)。它给了我错误"JSONObject不能转换为JSONArray".
错误行是
JSONArray dataArray2= (JSONArray)jsonObject2.get("data");
示例Asana 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)"
}
]
}
示例Asana单任务详细信息
{
"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();
}
}
}
根据文档,您必须使用getJSONArray()
方法而不是简单的get()
:
JSONArray dataArray2 = jsonObject2.getJSONArray("data");
您应该在进行强制转换之前添加一些主动检查。
:
Object dataArray2 = jsonObject2.get("data");
if(dataArray2 instanceof JSONArray){
JSONArray jsonArray=(JSONArray)dataArray2;
}
else if(dataArray2 instanceof JSONObject){
JSONObject jsonObject3=(JSONObject)dataArray2;
}