Commit 2ad5ee6e by Patryk Czarnik

Przykłady samodzielnego czytania JSON-a za pomocą jakarta.json

parent e165a805
Obsługa JSON w Javie
- gson (od Google)
dość zaawansowane, m.in. mapowanie obiektów
- Jackson - tego używają serwery RESTowe w JAvie, np. WlidFly / resteasy
to też automatyczne mapowanie obiektó Javy na JSON.
- org.json
bardzo proste - ogólne typy do reprezentacji tablic, obiektów JSONowych, napisów itd.
W Java EE 8 (albo 7 ???) dodano rozwiązanie do obsługi JSON, które teraz można uznać za standard
javax.json / jakarta.json
Trzy warianty:
- ogólne klasy odpowiadające elementom JSONa - TEGO UŻYJEMY
- "jsonb" - "binding" - automatyczne mapowanie obiektów Javy na JSON
- przetwarzanie strumieniowe bez wczytywania całości do pamięci
......@@ -27,4 +27,11 @@
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
</project>
package sklep.klient_rest;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonReader;
import jakarta.json.JsonValue;
public class P02_Url_Json {
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:8080/PC33-RestSerwer/products.json");
try(InputStream inputStream = url.openStream();
JsonReader reader = Json.createReader(inputStream)) {
JsonArray array = reader.readArray();
// System.out.println(array);
for(JsonValue jsonValue : array) {
//System.out.println(jsonValue);
System.out.println(jsonValue.asJsonObject().getString("productName"));
System.out.println(" opis: " + jsonValue.asJsonObject().getString("description", ""));
System.out.println(" cena: " + jsonValue.asJsonObject().getJsonNumber("price").bigDecimalValue());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package sklep.klient_rest;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import jakarta.json.JsonReader;
import jakarta.json.JsonValue;
public class P04_HttpClient_Json {
public static void main(String[] args) {
try {
JsonArray array = pobierzJsona("http://localhost:8080/PC33-RestSerwer/products.json");
for(JsonValue jsonValue : array) {
JsonObject jsonObject = jsonValue.asJsonObject();
System.out.println(jsonObject.getString("productName"));
if(jsonObject.containsKey("description")) {
System.out.println(" opis: " + jsonObject.getString("description", ""));
}
System.out.println(" cena: " + jsonObject.getJsonNumber("price").bigDecimalValue());
}
} catch (IOException | InterruptedException | URISyntaxException e) {
e.printStackTrace();
}
}
private static JsonArray pobierzJsona(String adres) throws IOException, InterruptedException, URISyntaxException {
HttpClient httpClient = HttpClient.newHttpClient();
URI uri = new URI(adres);
HttpRequest request = HttpRequest.newBuilder(uri).build();
HttpResponse<InputStream> response = httpClient.send(request, BodyHandlers.ofInputStream());
System.out.println("response " + response);
System.out.println("status: " + response.statusCode());
System.out.println("Content-Type: " + response.headers().firstValue("Content-Type").orElse("BRAK"));
return wczytajJsona(response.body());
}
private static JsonArray wczytajJsona(InputStream input) {
try(JsonReader reader = Json.createReader(input)) {
return reader.readArray();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment