Парсинг ответа Bloomberg в Java

Я получаю ответ Bloomberg, как это. Я хотел бы разобрать это и вывести значения, которые будут помещены в Excel или CSV.

Ответ Bloomberg - это головная боль в виде XML-ответа. Есть ли простой способ непосредственного анализа в JSON? (из объекта 'сеанс' или из объекта 'событие')

HistoricalDataResponse = {
    securityData = {
        security = "S X5 Comdty"
        eidData[] = {
            14001, 14001
        }
        sequenceNumber = 1
        fieldExceptions[] = {
        }
        fieldData[] = {
            fieldData = {
                date = 2015-05-06
                PX_LAST = 956.0
                OPEN = 967.25
            }
            fieldData = {
                date = 2015-06-06
                PX_LAST = 914.25
                OPEN = 956.0
            }
        }
    }
}

Это ответ. Поскольку в любом онлайн-средстве просмотра json у нас есть "=" вместо ":", в качестве недействительного json выдается ошибка.

1 ответ

Решение

Bloomberg API не создает допустимый JSON. Несмотря на то, что после некоторых модификаций вам может не понравиться анализировать его как JSON, он не является надежным подходом, поскольку формат может варьироваться в зависимости от типа запроса и полей, которые вы хотите получить (и может измениться в будущем, поскольку он не является частью спецификация).

Вы должны проанализировать его, используя предоставленные методы, как подробно описано в документации (см. Пример в разделе 7.2.2 - Запрос исторических данных в руководстве разработчика).

В качестве альтернативы вы можете использовать jBloomberg (отказ от ответственности: я автор), и ваш код будет выглядеть так:

 BloombergSession session = new DefaultBloombergSession();
 LocalDate now = LocalDate.now();
 RequestBuilder<HistoricalData> hrb = new HistoricalRequestBuilder("S X5 Comdty",
                          Arrays.asList("PX_LAST", "OPEN"),
                          now.minusDays(7), now);

 HistoricalData result = session.submit(hrb).get();
 Map<LocalDate, TypedObject> data = result.forSecurity("SPX Index").forField("PX_LAST").get();
 for (Map.Entry<LocalDate, TypedObject> e : data.entrySet()) {
     LocalDate dt = e.getKey();
     double price = e.getValue().asDouble();
     System.out.println("[" + dt + "] " + price);
 }

Дополнительные примеры доступны в нижней части этой страницы.

Другие вопросы по тегам