Вступление
Jackson — это очень популярная и эффективная библиотека на основе Java, используемая для преобразования JSON в объекты Java и наоборот. В этой статье я покажу, как легко использовать Джексона для получения данных в ответе JSON, полученного от REST API, и сохранить их в CSV-файл.
Я буду получать финансовые данные от Elektron Data Platform (EDP), которая предоставляет доступ к различным наборам данных Refinitiv и будет использовать исторические цены для образца.
Вам также может понравиться: Обработка JSON с Джексоном
Предварительно
1. Учетные данные для доступа EDP (имя пользователя, пароль и clientId), которые могут извлекать исторические данные о ценах. Вы можете связаться с представителями Refinitiv, чтобы получить имя пользователя и пароль и использовать их для создания clientId в Генераторе ключей приложения .
2. EDPToken
Вспомогательный класс используется для получения токена доступа, который требуется перед любыми запросами данных. Вы можете просто следовать этой статье: Простой Получение токена от EDP Gateway на Java .
Как это работает
Обзор процесса представляет собой следующую диаграмму:
Во-первых, вам нужен класс Java (верхний серый прямоугольник на диаграмме), который соответствует формату ответа данных JSON от EDP. Шаги по созданию Java-класса описаны в разделе Создание Java-класса, который соответствует JSON Response из EDP ниже.
Затем вы можете использовать Джексона ObjectMapper
для чтения класса Java и ответа JSON, полученного от REST API, для создания объекта Java, представляющего проанализированный JSON. Затем вы можете вызывать методы объекта Java, чтобы получить любые значения проанализированного JSON.
В моем приложении я получу значения ключа данных, имени и типа ключа заголовка, вызвав методы HistoricalPricingEvent
объекта. Отрезанный исходный код показан ниже:
Джава
1
//Jackson ObjectMapper reads HistoricalPricingEvents class and historical pricing events JSON response
2
//to create an object representing the parsed JSON.
3
HistoricalPricingEvent eventsData = new ObjectMapper().readerFor( HistoricalPricingEvent.class).readValue(jsonResp);
4
//get the values of data key in the object
5
List<List<String>> data = (List<List<String>>)eventsData.getData();
6
//Get the values of headers key in the object
7
List<Header> headers= eventsData.getHeaders();
8
//Get the values of name and type key in headers
9
Iterator<Header> hiterator = headers.iterator();
10
while(hiterator.hasNext()) {
11
Header aheader = (Header)hiterator.next();
12
String name = aheader.getName();
13
String type = aheader.getType();
14
}
HistoricalPricingEvent
Класс может быть сгенерирован с помощью http://www.jsonschema2pojo.org/ .
Полный исходный код приложения, включая HistoricalPricingEvent
класс, можно найти на GitHub .
Создание класса Java для соответствия ответу JSON из EDP
Вместо того, чтобы писать полный класс Java вручную, я буду использовать страницу http://www.jsonschema2pojo.org/ , которая может генерировать класс Java с аннотацией Джексона из схем JSON и JSON. Выполните следующие шаги, чтобы создать класс Java из JSON-схемы JSON-ответа исторических данных о ценах.
1. Зайдите в API Playground и найдите / data / исторические цены / сервис. Затем выберите путь / views / events / {universe} .
2. Выберите меню Swagger, чтобы загрузить файл схемы JSON.
3. Откройте файл схемы. Под / Views / событий / {вселенной} , найти успешный ответ (200 HTTP код состояния) , который содержит данные. Ответ ссылается на значение в пути / definitions / historyPricingData.
Скопируйте значение в путь / definitions / historyPricingData:
Вставьте значение в текстовое поле на http://www.jsonschema2pojo.org/
4. Посмотрите на значение в текстовом поле и найдите $ref
, которое ссылается на / определения / путь к статусу :
Скопируйте значение в путь / definitions / status, которое $ref
ссылается на:
Замените $ref
строку на скопированное значение:
Полная текстовая схема JSON в текстовом поле (шаг 3–4) — dataResponseJson.zip .
5. Установите имя пакета и класса, например, com.java.response и HistoricalPricingEvent
соответственно. В поле Тип источника выберите Схема JSON. Имя класса — это имя класса Java, которое соответствует формату схемы JSON.
6. Нажмите кнопку Zip . Затем классы Java генерируются и сжимаются в zip-файл. Наконец, отображается имя файла zip:
Нажмите на имя файла для загрузки.
Когда вы распакуете zip-файл, вы увидите файл классов Java ( HistoricalPricingEvent
) и связанные с ним классы, как показано ниже:
Скомпилируйте и запустите приложение
Прежде чем вы сможете скомпилировать и запустить приложение, вы должны установить CLASSPATH
для него указатель на Apache Http Components , JSON в java , Jackson Core , Jackson Annotations и Jackson Databind, как пример на компьютере с Windows ниже:
Джава
xxxxxxxxxx
1
set CLASSPATH=C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\commons-codec-1.11.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\commons-logging-1.2.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\httpclient-4.5.9.jar;C:\thirdPartyJars\httpcomponents-client-4.5.9\lib\httpcore-4.4.11.jar;C:\thirdPartyJars\JsonInJava\json-20180813.jar;C:\thirdPartyJars\commons-cli-1.4\commons-cli-1.4.jar;C:\thirdPartyJars\Jackson\jackson-annotations-2.9.9.jar;C:\thirdPartyJars\Jackson\jackson-core-2.9.9.jar;C:\thirdPartyJars\Jackson\jackson-databind-2.9.9.jar
Ниже приведена командная строка Java для запроса последних пяти событий в кавычках с именем элемента «THB =», то есть Thai Baht:
Джава
xxxxxxxxxx
1
java -classpath %CLASSPATH%;. com.java.HistoricalPricingEventsRequestor -user <EDP username> -clientId <clientId> -rics THB= -events quote -count 5
Консоль будет отображать следующее после успешного завершения:
Теперь вы можете проверить исторические данные о ценах в CSV-файле, как в примере ниже:
Резюме
Это всего лишь пример, объясняющий, как использовать Джексона для отображения JSON на объекты Java. Затем вы можете легко управлять объектами Java различными способами. Также предлагается http://www.jsonschema2pojo.org/ , который может генерировать класс Java из схемы ответов JSON. Джексону требуется этот класс Java для анализа ответа JSON в объект этого класса Java. Это может быть более автоматизировано, особенно с помощью доступа к файлу схемы и его обновления, которое можно найти в APIDocs для других API.