简体   繁体   中英

How to extract specific data from json with multiple nodes?

  1. Using java with selenium
  2. I have captured full json in my code
  3. IN my json there are two nodes "Service1" and "Service2"
  4. My requirement is to fetch the details of "Services1" node -->data node
  5. But i am not able to extract only Service1 with data node details(i do not want "test" node details.

Question: Can you please help me to extract data from Service1-with data node only using java code?I am using selenium with java.I need this for one of the script.

 Actual response:
    {
"Service1": [
    {
        "data": {
            "status": false,
            "type": "A",
            "order": 1,
            "Version": "v6"
        },
        "test": {
            "ModuleID": "123456",
            "BoxID": "a777",
            "Url": "https://google.com"

        }

    },
    {
       "data": {
            "status": true,
            "type": "B",
            "order": 1,
            "Version": "v2"
        },
        "test": {
            "ModuleID": "123456",
            "BoxID": "a777",
            "Url": "https://google.com"


        }
    }

],
"Service2": {
   "data1": {
            "status": false,
            "type": "c",
            "order": 1,
            "Version": "v6"
        },
        "dashboard": {
            "ModuleID": "123456",
            "BoxID": "a777",
            "Url": "https://google.com"

        }
}
}

Expected data :
[
  {
    "status": false,
    "type": "A",
    "order": 1,
    "Version": "v6"
   },
  {
   "status": true,
   "type": "B",
   "order": 1,
   "Version": "v2"
  }
  ]

Fetching the required data is based on the api response. But in the result of the fetched data you can convert it as you want in java as:

Main theme:

JSONObject response = new JSONObject("json data");//replace json data with your given json data
JSONArray service1 = response.getJSONArray("Service1");
JSONObject firstObjectInService1 = service1.getJSONObject(0);
JSONObject secondObjectInService1 = service1.getJSONObject(1);
JSONObject dataInFirstObject = firstObjectInService1.getJSONObject("data");
JSONObject dataInSecondObject = secondObjectInService1.getJSONObject("data");

Full code snippet:

import org.json.*;
public class JsonParsing {
public static void main(String[] args) {
    String jsonData = "{\n" +
            "\"Service1\": [\n" +
            "    {\n" +
            "        \"data\": {\n" +
            "            \"status\": false,\n" +
            "            \"type\": \"A\",\n" +
            "            \"order\": 1,\n" +
            "            \"Version\": \"v6\"\n" +
            "        },\n" +
            "        \"test\": {\n" +
            "            \"ModuleID\": \"123456\",\n" +
            "            \"BoxID\": \"a777\",\n" +
            "            \"Url\": \"https://google.com\"\n" +
            "\n" +
            "        }\n" +
            "\n" +
            "    },\n" +
            "    {\n" +
            "       \"data\": {\n" +
            "            \"status\": true,\n" +
            "            \"type\": \"B\",\n" +
            "            \"order\": 1,\n" +
            "            \"Version\": \"v2\"\n" +
            "        },\n" +
            "        \"test\": {\n" +
            "            \"ModuleID\": \"123456\",\n" +
            "            \"BoxID\": \"a777\",\n" +
            "            \"Url\": \"https://google.com\"\n" +
            "\n" +
            "\n" +
            "        }\n" +
            "    }\n" +
            "\n" +
            "],\n" +
            "\"Service2\": {\n" +
            "   \"data1\": {\n" +
            "            \"status\": false,\n" +
            "            \"type\": \"c\",\n" +
            "            \"order\": 1,\n" +
            "            \"Version\": \"v6\"\n" +
            "        },\n" +
            "        \"dashboard\": {\n" +
            "            \"ModuleID\": \"123456\",\n" +
            "            \"BoxID\": \"a777\",\n" +
            "            \"Url\": \"https://google.com\"\n" +
            "\n" +
            "        }\n" +
            "}\n" +
            "}";
    System.out.println(jsonData);

    try {
        JSONObject response = new JSONObject(jsonData);//replace json data with your given json data
        JSONArray service1 = response.getJSONArray("Service1");
        JSONObject firstObjectInService1 = service1.getJSONObject(0);
        JSONObject secondObjectInService1 = service1.getJSONObject(1);
        JSONObject dataInFirstObject = firstObjectInService1.getJSONObject("data");
        JSONObject dataInSecondObject = secondObjectInService1.getJSONObject("data");
        System.out.println(dataInFirstObject);
        System.out.println(dataInSecondObject);
    } catch (JSONException je) {
        //do what you want
    }
}
}

so finally in dataInFirstObject we have:

{
   "status": false,
   "type": "A",
   "order": 1,
   "Version": "v6" 
}

and dataInSecondObject we have:

{
    "status": true, 
    "type": "B",
    "order": 1,
    "Version": "v2"
}

You can use JSON simple library ,it is library used to read/write/parse data in JSON file.In this example i read data from JSON file not a JSON content directly.

 private void findData() {

   ArrayList<String> dataArrayList=new ArrayList<>();

try {

    JSONParser parser = new JSONParser();
    InputStream in = getClass().getResourceAsStream("/json/Services.json");
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    Object obj = parser.parse(reader);
    JSONObject jsonObject = (JSONObject) obj;

    JSONArray msg = (JSONArray) jsonObject.get("Service1");
    Iterator<JSONObject> iterator = msg.iterator();

    while (iterator.hasNext()) {
        JSONObject jsonObjectData = iterator.next();
        JSONObject dataObject = (JSONObject) jsonObjectData.get("data");
        System.out.println(dataObject); 
        //Extract values 
  dataObject.values().stream().forEach(value->{
                    System.out.println(value);
     dataArrayList.add(value.toString());

                });
    }

} catch (IOException | org.json.simple.parser.ParseException ex) {
    Logger.getLogger(CorporationRegistrationFormController.class.getName()).log(Level.SEVERE, null, ex);
}

}  

If you need read JSON content from your code just replace the reader with your content like this : Object obj = parser.parse("JSON content");

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