Как извлечь конкретные данные из JSON с несколькими узлами?

  1. Использование Java с селеном
  2. Я захватил полный JSON в моем коде
  3. В моем JSON есть два узла "Сервис1" и "Сервис2"
  4. Мое требование - получить подробную информацию об узле "Services1" -> узел данных
  5. Но я не могу извлечь только Service1 с деталями узла данных (я не хочу "тестировать" детали узла.

Вопрос: Не могли бы вы помочь мне извлечь данные из узла данных Service1-with только с использованием кода Java? Я использую селен с Java. Мне это нужно для одного из сценариев.

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

2 ответа

Решение

Вы можете использовать простую библиотеку JSON, это библиотека, используемая для чтения / записи / анализа данных в файле JSON. В этом примере я считываю данные из файла JSON, а не непосредственно содержимое JSON.

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

}  

Если вам нужно прочитать содержимое JSON из вашего кода, просто замените читатель своим содержимым следующим образом: Object obj = parser.parse("JSON content");

Выборка необходимых данных основана на ответе API. Но в результате извлеченных данных вы можете преобразовать их как вы хотите в Java как:

Основная тема:

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");

Полный фрагмент кода:

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
    }
}
}

итак, в dataInFirstObject мы имеем:

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

и dataInSecondObject у нас есть:

{
    "status": true, 
    "type": "B",
    "order": 1,
    "Version": "v2"
}
Другие вопросы по тегам