Как получить первый объект данных объекта данных (REST api)

#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. Вам нужно получить ввод от пользователя и в свою программу