0

I am new to REST API and handling JSON in our automation script. I have an API whose response is JSONArray i.e.,

[{"ProjectID":15,"ProjectName":" Securities"},{"ProjectID":16,"ProjectName":"PAS "}]

While automation, for verification I need to fetch the reponse. I have tried the below one but not getting expected output

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Scanner;
 import org.json.*;

 public class ProjectNameVerfication {

 public static void main(String[] args) throws JSONException
 {

  try 
  {
    URL url = new URL("http://17*.**.**.**:3000/api/******");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Accept", "application/json");

    if (conn.getResponseCode() != 200) 
    {
       throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
    }

    Scanner scan = new Scanner(url.openStream());
    String str = new String();
    while (scan.hasNext())
       str += scan.nextLine();
    scan.close();

    System.out.println("str : " + str);

    JSONObject obj = new JSONObject(str.substring(str.indexOf('{')));
    System.out.println("obj : " +obj);
    int ProjectID = obj.optInt("ProjectID");
    String ProjectName = obj.getString("ProjectName");

    System.out.println("ProjectID: " +ProjectID);
    System.out.println("ProjectName: " +ProjectName);

    JSONArray arr = obj.getJSONArray("ProjectID");
    for (int i = 0; i < arr.length(); i++)
    {
      String post_id =arr.getJSONObject(i).getString("ProjectName");
    }

    conn.disconnect();
  }
  catch (MalformedURLException e) { e.printStackTrace();}
  catch (IOException e) { e.printStackTrace(); }

 }
}

Actual output is bellow:

str : [{"ProjectID":15,"ProjectName":" Securities"},{"ProjectID":16,"ProjectName":"PAS "}]

obj : {"ProjectName":" securities""ProjectID":15}

ProjectID: 15
ProjectName:  Securities

Exception in thread "main" org.json.JSONException: JSONObject["ProjectID"] is not a JSONArray.
    at org.json.JSONObject.getJSONArray(JSONObject.java:539)
    at MyTest.ProjectNameVerfication.main(ProjectNameVerfication.java:60)
1
  • Pls avoid changing the ACCEPTED answer. Commented May 27, 2016 at 9:06

3 Answers 3

1

You want to get all ProjectName,right?

look at your response data:

[{"ProjectID":15,"ProjectName":" Securities"},{"ProjectID":16,"ProjectName":"PAS "}]

it is already a JSONArray string,you can parse it as JSONArray ,and get ProjectName in foreach

    JSONArray jsonArray = new JSONArray("your str"); 
    for (Object object : jsonArray) { 
        JSONObject jsonObject = (JSONObject)object;
        System.out.println(jsonObject.toString()); 
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for quick response , How can i parse it as JSONArray ?
0

If you are using simple JSON you have to parse as follows.

String str="[{\"ProjectID\":15,\"ProjectName\":\" Securities\"}, {\"ProjectID\":16,\"ProjectName\":\"PAS \"}]";

        JSONParser json=new JSONParser();
        try {
        JSONArray   arr=(JSONArray)json.parse(str);         
        for (int i = 0; i < arr.size(); i++) {
            JSONObject obj=(JSONObject)arr.get(i); 
            System.out.println("ProjectID: "+obj.get("ProjectID"));
            System.out.println("ProjectName: "+obj.get("ProjectName"));
        } 
        } catch (ParseException e) {                
            e.printStackTrace();
        }

Comments

0

Your response is an Array so you need JSONArray instead of JSONObject.

    try {

        JSONArray e = new JSONArray(str);
        int l = e.length();

        for (int x = 0; x < l; x++) {
            JSONObject object1 = e.getJSONObject(x);
            String projectID = object1.getString("ProjectID");
            String projectName = object1.getString("ProjectName");
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

2 Comments

Its working thanks , And also i have tried this JSONArray jsonarray = new JSONArray(str); for (int i = 0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String ProjectName1 = jsonobject.getString("ProjectName"); int ProjectID1 = jsonobject.optInt("ProjectID"); System.out.println("ProjectID: " +ProjectID1); System.out.println("ProjectName: " +ProjectName1);
I'm glad it helps :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.