简体   繁体   中英

How to fetch JSON object from Json array in REST API

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

[{"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)

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

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

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

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