【发布时间】:2019-05-16 10:22:15
【问题描述】:
如何将在(python3 和flask)中使用bloomberg API 返回的响应消息转换为JSON
here is a response example:
ReferenceDataResponse = {
securityData[] = {
securityData = {
security = "FB EQUITY"
eidData[] = {
}
fieldExceptions[] = {
}
sequenceNumber = 0
fieldData = {
PX_LAST = 186.270000
VOLUME = 16746904.000000
}
}
securityData = {
security = "IBM EQUITY"
eidData[] = {
}
fieldExceptions[] = {
}
sequenceNumber = 1
fieldData = {
PX_LAST = 134.400000
VOLUME = 2551009.000000
}
}
}
}
用即将到来的代码处理它:
if str(msg.messageType()) == "ReferenceDataResponse":
securities = msg.getElement('securityData')
securities_count = securities.numValues()
for i in range(securities_count):
security = securities.getValueAsElement(i)
ticker = security.getElementAsString('security')
if (security.hasElement('fieldData')):
fields = security.getElement('fieldData')
fields_count = fields.numElements()
for j in range (fields_count):
security_dict = None
field = fields.getElement(j)
f_name = field.name()
f_value = field.getValueAsString()
security_dict = {"ticker":ticker ,"f_name":f_name , "f_value":f_value}
bloom_data.append(security_dict)
给我(名称类型的对象不是 JSON 可序列化的) 现在,我无法访问名称对象以获取字段名称 任何帮助将不胜感激
【问题讨论】:
-
Bloomberg 消息未使用 json 格式。所以你需要解析消息(可以在网上或文档中找到多个示例)并从数据中创建一个 JSON 对象。
-
很抱歉,我不熟悉python(我使用Java API)。根据错误消息,我怀疑问题是
f_name = field.name(),它返回一个Name对象而不是字符串。在 Java 中,您会使用field.name().toString()来获取底层字符串 - 我想 Python 中也有类似的函数。
标签: json python-3.x bloomberg