Я создаю страницу сервлета Java для школы, и я хотел бы поместить в нее API. Пока что у меня были проблемы с API.
Это "Schiphol PublicFlight API", который я хочу связать со своей веб-страницей.
Однако я не могу заставить Java использовать API на основе JSON.
До сих пор я пытался «изолировать» все больше и больше JSON-кода, но никак не могу заставить его работать. Чтобы упростить мне задачу, я пока отделил код Java-сервлета от проекта. Итак, это мой код:
package nl.hva.ic103.johannes;
import java.io.FileReader;
import java.util.Iterator;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class Main {
public static void main(String[] args) throws Exception {
JSONParser parser = new JSONParser();
String flightnumber = "HV6672";
HttpClient httpClient = HttpClients.createDefault();
HttpGet request = new HttpGet("https://api.schiphol.nl/public-flights/flights?app_id=61439ff8&app_key=b313373fd4122e93704874c69a59233d&flightname = " + flightnumber + "&sort=%2Bscheduletime");
request.addHeader("ResourceVersion", "v3");
HttpResponse response = httpClient.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(responseBody);
JSONObject jsonObject = (JSONObject) parser.parse(responseBody);
JSONObject jo = (JSONObject) jsonObject;
String id = (String) jo.get("id");
String lastName = (String) jo.get("flightName");
System.out.println(id);
System.out.println(lastName);
JSONArray ja = (JSONArray) jo.get("flights");
System.out.println(ja);
}
}
}
И это формат JSON, который мне дает API:
{
"flights": [
{
"id": 125936439536285950,
"flightName": "HV6672",
"scheduleDate": "2018-12-26",
"flightDirection": "A",
"flightNumber": 6672,
"prefixIATA": "HV",
"prefixICAO": "TRA",
"scheduleTime": "01:00:00",
"serviceType": "J",
"mainFlight": "HV6672",
"codeshares": {
"codeshares": [
"KL2582"
]
},
"estimatedLandingTime": "2018-12-26T00:30:49.000+01:00",
"actualLandingTime": "2018-12-26T00:30:55.000+01:00",
"publicEstimatedOffBlockTime": null,
"actualOffBlockTime": null,
"publicFlightState": {
"flightStates": [
"LND",
"EXP"
]
},
"route": {
"destinations": [
"TFS"
]
},
"terminal": 1,
"gate": "D74",
"baggageClaim": {
"belts": [
"6"
]
},
"expectedTimeOnBelt": "2018-12-26T01:16:53.669+01:00",
"checkinAllocations": null,
"transferPositions": null,
"aircraftType": {
"iatamain": "73H",
"iatasub": "73H"
},
"aircraftRegistration": "PHHZX",
"airlineCode": 164,
"expectedTimeGateOpen": null,
"expectedTimeBoarding": null,
"expectedTimeGateClosing": null,
"schemaVersion": "3"
}
],
"schemaVersion": "3"
}
Как я могу получить такие вещи, как «ворота», «терминал» и «тип самолета», проанализированные в моей java-программе? Я чувствую, что все, что я могу получить с этими результатами, - это как один фрагмент данных, и их невозможно разделить. Кто-нибудь знает, как проанализировать эти три результата в моем java-проекте? Более подробная информация об API указана на их веб-сайте: https://www.schiphol.nl/en/developer-center/page/our-flight-api-explored/




JSONArray ja = (JSONArray) jo.get("flights");
JsonObject flightRec = ja.getJsonObject(0);
String gate = (String) flightRec.get("gate");
//...etc
Какая проблема?
Я получаю сообщение «невозможно разрешить метод getJsonObject (int)» и «невозможно преобразовать com.google.gson.JsonElement в java.lang.String». Как мне тогда это исправить?
Вы используете gson? Попробуйте JsonObject rec = ja.get(0).getAsJsonObject(); String gate = rec.get("gate").getAsString();, подробности см. В руководстве к вашей json-библиотеке (static.javadoc.io/com.google.code.gson/gson/2.6.2/com/googl e /…)
Я преобразовал все в Gson сейчас, и вместе с вашим кодом он, наконец, работает! Спасибо за вашу помощь
Вместо этого я мог бы рассмотреть возможность использования библиотеки GSON, которая может анализировать JSON в POJO.