Анализ ответа Json, отправленного из API Google Дистанционная матрица
Этот JSON происходит, когда пункт назначения или источник находится за пределами Великобритании, поэтому не дает мне никаких результатов! Мне нужно проверить это для нулевой проверки, поэтому я не получаю исключение нулевого указателя
JSON RESULT:
{
"destination_addresses" : [ "Durham, NC, USA" ],
"origin_addresses" : [ "Lancashire, UK" ],
"rows" : [
{
"elements" : [
{
"status" : "ZERO_RESULTS"
}
]
}
],
"status": "OK"}
Код:
public static void extractJsonFromRequest(GoogleResponsePojo response) {
String destinationAddress =
response.getDestination_addresses().get(0);
String timeTaken =
response.getRows().get(0).getElements().get(0).getDuration().getText();
String originAddress = response.getOrigin_addresses().get(0);
System.out.println("It will take ** "+ timeTaken + " ** to walk
from " + originAddress + " to " + destinationAddress);
}
Google Reponse POJO, который является структурой json:
public class GoogleResponsePojo {
private List<String> destination_addresses;
private List<String> origin_addresses;
private List<Rows> rows;
public List<String> getDestination_addresses() {
return destination_addresses;
}
public void setDestination_addresses(List<String> destination_addresses) {
this.destination_addresses = destination_addresses;
}
public List<String> getOrigin_addresses() {
return origin_addresses;
}
public void setOrigin_addresses(List<String> origin_addresses) {
this.origin_addresses = origin_addresses;
}
public List<Rows> getRows() {
return rows;
}
public void setRows(List<Rows> rows) {
this.rows = rows;
}
}
class Rows {
private List<Element> elements;
public List<Element> getElements() {
return elements;
}
public void setElements(List<Element> elements) {
this.elements = elements;
}
}
class Element {
private TextValue distance;
private TextValue duration;
public TextValue getDistance() {
return distance;
}
public void setDistance(TextValue distance) {
this.distance = distance;
}
public TextValue getDuration() {
return duration;
}
public void setDuration(TextValue duration) {
this.duration = duration;
}
}
class TextValue {
private String text;
private String value;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
По сути, мне нужно просто разобрать json ниже, чтобы я мог сказать (если status!= ZERO_RESULTS) сохранить ответ, иначе выведите исключение! Наверное, легко, но я борюсь! Спасибо!
1 ответ
Измените GoogleResponsePojo на:
public class GoogleResponsePojo {
private List<String> destination_addresses;
private List<String> origin_addresses;
private List<Rows> rows;
public void setDestination_addresses(List<String> destination_addresses) {
this.destination_addresses = destination_addresses;
}
public void setOrigin_addresses(List<String> origin_addresses) {
this.origin_addresses = origin_addresses;
}
public void setRows(List<Rows> rows) {
this.rows = rows;
}
//getters
}
private static class Rows{
private List<Element> elements;
public void setElements(List<Element> elements) {
this.elements = elements;
}
//getters
}
private static class Element{
private TextValue distance;
private TextValue duration;
public void setDistance(TextValue distance) {
this.distance = distance;
}
public void setDuration(TextValue duration) {
this.duration = duration;
}
//getters
}
private static class TextValue{
private String text;
private String value;
public void setText(String text) {
this.text = text;
}
public void setValue(String value) {
this.value = value;
}
//getters
}
Ты можешь взять duration
следующим образом:
GoogleResponsePojo name = gson.fromJson(response.toString(),GoogleResponsePojo.class);
name.getRows().get(0).getDuration().getText();
И я рекомендую использовать http-запрос, построенный на apache http api. Его просто использовать:
public static final String BASE_URL = "https://maps.googleapis.com/maps/api/distancematrix/json";
private static final HttpRequest<GoogleResponsePojo> HTTP_REQUEST =
HttpRequestBuilder.createGet(BASE_URL, GoogleResponsePojo.class)
.addDefaultRequestParameter("origins", "Seattle")
.addDefaultRequestParameter("destinations", "San+Francisco")
.addDefaultRequestParameter("key", "***")
.build();
@GET
@Produces(MediaType.APPLICATION_JSON)
public static void updateTestExecutionDetails() throws IOException {
ResponseHandler<GoogleResponsePojo> responseHandler = HTTP_REQUEST.execute();
GoogleResponsePojo name = responseHandler.orElseThrow(); // throws ResponseException when status code != 200
System.out.println(name.getDestination_addresses().get(0));
System.out.println(name.getRows().get(0).getElements().get(0).getDuration().getText());
System.out.println(name.getOrigin_addresses().get(0));
}