在Java中解析Bloomberg响应

3
我收到的布隆伯格(Bloomberg)响应如下。我想解析它并获取值,以便放入Excel或CSV文件中。
布隆伯格响应是一种XML响应,可能会让人头痛。是否有一种简单的方式可以直接将其解析成JSON格式?(从“session”对象或“event”对象中)
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错误。


如果这是唯一的问题,您可以将=替换为:,然后将其解析为JSON。 - Alkis Kalogeris
尝试过了,但仍然不起作用。我手动将所有的=更改为:。 - Arun Raja
不仅如此,您还需要更改双引号内的每个属性名称。例如“securityData”。就像这样,您需要替换所有双引号内的属性名称。 - E Do
除非您拥有彭博终端,否则无法使用该API。 - Arun Raja
非常感谢,现在它可以工作了,能够提取单个值。 - Arun Raja
显示剩余4条评论
1个回答

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

更多的例子可以在这个页面底部找到。

非常感谢。我尝试按照彭博指南第45页给出的方式获取数值,也将尝试这种方法。 - Arun Raja
第45页是针对ReferenceDataRequest的,不适用于HistoricalDataRequest。你需要使用第7.2.2节(第83页)中的代码。 - assylias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接