Hoe kinne jo JSON-antwurd analysearje mei REST-fersekere?

Yn dizze tutorial foar API-testen sjogge wy hoe't jo JSON-antwurd kinne analysearje en ynformaasje ekstrahearje mei de REST-fersekere bibleteek.

By it testen fan in API meitsje jo typysk in fersyk nei in boarne, (bgl. Fia in GET- of POST-fersyk). De server komt werom mei in antwurd en dan dogge jo wat bewearingen oer it antwurd.



Hoe kinne jo JSON-antwurd analysearje?

Foar dit tutorial sil ik brûke JSONPlaceholder dat is in falske online REST API foar testen en prototyping. JSONPlaceholder is in fergese online REST-tsjinst dy't jo kinne brûke as jo wat falske gegevens nedich binne.


Mear spesifyk sil ik it einpunt fan brûkers brûke jsonplaceholder ,

Fersyk en antwurd

As wy in GET-fersyk meitsje foar de boppesteande boarne, krije wy in JSON-antwurd dat in list mei brûkers befettet. Dizze list wurdt fertsjintwurdige as in JSON Array. Elke array hat in struktuer lykas dizze:


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

Dêrom sille d'r yn 'e folsleine antwurd tsien records yn' e array wêze, elk mei deselde JSON-struktuer, mar mei ferskillende wearden.

Related:

Litte wy no begjinne mei it analysearjen en útpakke fan guon wearden út 'e JSON.

De earste test soe typysk wêze om it oantal records yn 'e array te tellen, dus litte wy dêrmei begjinne.


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

It resultaat fan 'e boppesteande oprop soe 10 ôfdrukke. Opmerking de $ notaasje dat it root-elemint betsjut.

JSON-arrays en -lists analysearje

As wy yn 't boppesteande foarbyld de brûkersnamme fan alle yngongen woenen krije, kinne wy ​​brûke:

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

Dit soe de array drukke lykas:

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

As wy dan de brûkersnamme wolle krije fan 'e earste yngong kinne wy ​​brûke:


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

Dit soe de earste brûkersnamme ôfdrukke:

Bret

Mei in list kinne wy ​​brûke:

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

Dit soe de earste brûkersnamme ôfdrukke:

Bret

Parsing JSON ArrayList en HashMap

Sjoen de boppesteande JSON-struktuer is it bedriuw eins in kaart. As wy mar ien record hiene, kinne wy ​​brûke:


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

hokker soe ôfdrukke:

Romaguera-Crona

Mar as it antwurd in array jout en wy de earste bedriuwsnamme wolle ekstrahearje, kinne wy ​​brûke:

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

As alternatyf kinne wy ​​brûke:

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

beide sille drukke:


Romaguera-Crona