Извлечение данных из API и использование их в качестве полезной нагрузки в вызове POST - PullRequest
0 голосов
/ 11 июля 2019

У меня есть этот тестовый сценарий, в котором мне нужно

  • извлечь данные из API,
  • записать его в файл,
  • сделать обновления в JSONмассив и обновить файл
  • использовать новый файл в качестве полезной нагрузки.

Я смог сделать первые два шага, но не смог продолжить в дальнейших шагах, так как я не играл с JSON в Java.

APIрезультат шага 1:

{"id":123,"type":"employee","employee_id":"5162231","full_name":"Mark Hamil","email_id":"mark_ham@ham.test","created_at":"2014-03-26","updated_at":"2015-04-06","empno":9122,"branches":[{"name":"Assets","asset_id":"56","attr_typ":"Assets","asset_path":"12-34-56789","is_pr":false,"is_lead":false},{"name":"Retail Banking","asset_id":"8","attr_typ":"RB","asset_path":"8-12-11221","is_pr":false,"is_lead":true},{"name":"Corporate Banking","asset_id":"94","attr_typ":"CB","asset_path":"94-122-22123","is_pr":false,"is_lead":true},{"name":"Rural Banking","asset_id":"118","attr_typ":"RuB","asset_path":"97-1188","is_pr":false,"is_lead":true}],"email_freq":{"id":21,"immediately":"N","daily":"N","weekly":"N","monthly":"N","ind_id":1136},"responsible_for":[{"region":"AS","office_code":"TH","office_loc":"BNK","name":"Asia - Thailand - Bangkok"}]}

Обновления, которые необходимо сделать:

Необходимо добавить новый объект json для ответственного офиса в ключе responsible_for.Обновленное значение для responsible_key должно выглядеть следующим образом:

"responsible_for":[{"region":"AS","office_code":"TH","office_loc":"BNK","name":"Asia - Thailand - Bangkok"},{"region":"AS","office_code":"ML","office_loc":"KLP","name":"Asia - Malaysia - Kualalumpur"}]}

Код до сих пор

Я создал метод, который выполняет все четыре шага за один раз -

     public static void change_person_details_json()throws IOException {

     // get the person details after appending the id with base path/person          

 HelperRest.hitGetRequest(ConfigReader.getBaseUrl()+"person/"+HelperRest.get_person_id());
                 System.out.println(HelperRest.getResponse().body().asString());
                 HelperRest.logEverything();

    //write the API response to a json file
                 try(FileWriter writer = new FileWriter(ConfigReader.getRequestPayloadFilePath()+"update-json.json")){
                     writer.write(HelperRest.getResponse().body().asString());
                     writer.flush();
                 } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

1 Ответ

1 голос
/ 12 июля 2019

Я могу помочь вам с 3-м пунктом.Добавление элемента в JSON.

Я использовал org.json library

        <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>

Вы сохраняете ответ в файл .json, но вам не нужно этого делать.Вы можете работать с JSON как String с заданной библиотекой.Поэтому вместо того, чтобы делать это следующим образом:

//write the API response to a json file
                 try(FileWriter writer = new FileWriter(ConfigReader.getRequestPayloadFilePath()+"update-json.json")){
                     writer.write(HelperRest.getResponse().body().asString());
                     writer.flush();
                 } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

Вы можете использовать

String jsonResponse = HelperRest.getResponse().body().asString();

JSONObject root = new JSONObject(jsonResponse);
JSONArray responsibleForArray = root.getJSONArray("responsible_for");

HashMap<String, String> newResponsibleForMap = new HashMap<>();
newResponsibleForMap.put("region", "AS");
newResponsibleForMap.put("office_code", "ML");
newResponsibleForMap.put("office_loc", "KLP");
newResponsibleForMap.put("name", "Asia - Malaysia - Kualalumpur");

responsibleForArray.put(newResponsibleForMap);

System.out.println(root);

Надеюсь, это поможет каким-то образом!

...