解析Java中的bloomberg响应

时间:2015-06-09 07:38:55

标签: java json bloomberg blpapi

我得到像这样的布隆伯格回应。我想解析这个并将值放在excel或csv中。

彭博响应是一种令人头疼的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 个答案:

答案 0 :(得分:3)

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);
 }

this page底部有更多示例。