Kaip išanalizuoti JSON atsakymą užtikrinus REST

Šioje API testavimo pamokoje apžvelgsime, kaip išanalizuoti JSON atsakymą ir išgauti informaciją naudojant „REST“ užtikrintą biblioteką.

Testuodami API, paprastai pateikiate užklausą ištekliui (pvz., Naudodami GET arba POST užklausą). Serveris grįžta su atsakymu, tada jūs darote keletą teiginių apie atsakymą.



Kaip išanalizuoti JSON atsakymą

Šiai pamokai aš naudosiu JSONPlaceholder kuri yra netikra internetinė REST API testavimui ir prototipų kūrimui. „JSONPlaceholder“ yra nemokama internetinė „REST“ paslauga, kuria galite naudotis visada, kai jums reikia suklastotų duomenų.


Tiksliau, naudosiu vartotojų galinį tašką jsonplaceholder .

Prašymas ir atsakymas

Pateikdami GET užklausą aukščiau nurodytam ištekliui, gausime JSON atsakymą, kuriame yra vartotojų sąrašas. Šis sąrašas pateikiamas kaip JSON masyvas. Kiekvieno masyvo struktūra yra tokia:


{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
address: {
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: {

lat: '-37.3159',

lng: '81.1496'
}
},
phone: '1-770-736-8031 x56442',
website: 'hildegard.org',
company: {
name: 'Romaguera-Crona',
catchPhrase: 'Multi-layered client-server neural-net',
bs: 'harness real-time e-markets'
} }

Todėl atsakant į masyvą bus dešimt įrašų, kurių kiekvienas turi tą pačią JSON struktūrą, tačiau skirtingas reikšmes.

Susijęs:

Dabar pradėkime nuo kai kurių reikšmių analizavimo ir ištraukimo iš JSON.

Pirmasis bandymas paprastai būtų suskaičiuoti masyvo įrašų skaičių, todėl pradėkime nuo to.


import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.parsing.Parser; import io.restassured.response.Response; import java.util.List; import static io.restassured.RestAssured.given; public class RestTest {
public static Response doGetRequest(String endpoint) {
RestAssured.defaultParser = Parser.JSON;

return

given().headers('Content-Type', ContentType.JSON, 'Accept', ContentType.JSON).


when().get(endpoint).


then().contentType(ContentType.JSON).extract().response();
}
public static void main(String[] args) {
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users');

List jsonResponse = response.jsonPath().getList('$');

System.out.println(jsonResponse.size());
} }

Ankstesnio skambučio rezultatas atspausdins 10 Atkreipkite dėmesį į $ žymėjimas, kuris reiškia šaknies elementą.

Analizuojami JSON masyvai ir sąrašai

Ankstesniame pavyzdyje, jei norėtume gauti visų įrašų vartotojo vardą, galėtume naudoti:

String usernames = response.jsonPath().getString('username'); System.out.println(usernames);

Tai masyvą atspausdins taip:

[Bret, Antonette, Samantha, Karianne, Kamren, Leopoldo_Corkery, Elwyn.Skiles, Maxime_Nienow, Delphine, Moriah.Stanton]

Jei tada norime gauti pirmojo įrašo, kurį galėtume naudoti, vartotojo vardą:


String usernames = response.jsonPath().getString('username[0]');

Tai atspausdins pirmąjį vartotojo vardą:

Bret

Naudodami sąrašą galime naudoti:

List jsonResponse = response.jsonPath().getList('username'); System.out.println(jsonResponse.get(0));

Tai atspausdins pirmąjį vartotojo vardą:

Bret

Analizuojami „JSON ArrayList“ ir „HashMap“

Žvelgiant į aukščiau pateiktą JSON struktūrą, įmonė iš tikrųjų yra žemėlapis. Jei turėtume tik vieną įrašą, galėtume naudoti:


Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/1'); Map company = response.jsonPath().getMap('company'); System.out.println(company.get('name'));

kuris atspausdintų:

Romaguera-Crona

Bet jei atsakymas pateikia masyvą ir mes norime išgauti pirmąjį įmonės pavadinimą, galime naudoti:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); Map company = response.jsonPath().getMap('company[0]'); System.out.println(company.get('name'));

Arba mes galime naudoti:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); List companies = response.jsonPath().getList('company'); System.out.println(companies.get(0).get('name'));

abu atspausdins:


Romaguera-Crona