#java #api #rest #okhttp
Вопрос:
У меня есть api REST, который содержит данные таким образом
{
...
... //<- more data here
...
"currencies": {
"BTN": {
"name": "Bhutanese ngultrum",
"symbol": "Nu."
},
"INR": {
"name": "Indian rupee",
"symbol": "₹"
}
}
...
... //<- more data here
...
}
я выполняю проект на java , в котором мне нужно использовать okhttp и показывать информацию о стране из доступного api rest , и до того, как я использовал этот api, в нем были все данные в валютах в массиве данных, и это было полезно, так как вы можете просто получить первый нулевой объект из массива, но после обновления api они сделали все данные в валютах объектом, и мне нужен только первый объект, любым способом я могу его получить?
Ответ №1:
Итак, у вас есть два варианта …
Вариант 1. Создайте два таких класса и используйте ObjectMapper
класс для автоматической десериализации.
class CurrencyData {
String name;
String symbol;
}
class CurrencyJsonResponse {
CurrencyData INR;
CurrencyData BTN;
}
public static void main(String[] args) {
OkHttpClient client = // build an instance;
ObjectMapper objectMapper = new ObjectMapper();
ResponseBody responseBody = client.newCall(request).execute().body();
CurrencyJsonResponse currencyResponse = objectMapper.readValue(responseBody.string(), CurrencyJsonResponse.class);
//Get data by using getters on currencyResponse object
}
Вариант 2
Вы можете написать пользовательский десереализатор, расширив StdDeserializer<T>
класс. Вам придется программно проверить JsonNode
дерево синтаксического анализа и собрать нужный объект.
В этой статье объясняется, как это сделать, и приводится пример рабочего кода
Комментарии:
1. как я могу получить валюты , если я не знаю валюты с самого начала , допустим, пользователь дает страну «аруба», тогда ее валюта AWG, ну, я знаю ее AWG, но программа не знает, что я могу здесь сделать
2. Вам нужно получить ввод от пользователя и в свою программу