如何把JSON字符串写入DolphinDB的内存表?
我在尝试从一个HTTP API获取JSON数据,并将其转换为DolphinDB的内存表。JSON响应是一个对象数组,我想把它存成一张表,其中每个对象对应一行。
下面是我的代码:
try {
loadPlugin("httpClient")
} catch(x) {
print("Plugin load failed: " + x)
}
API_KEY = 'risksoft_33585c5e-da1f-4e3b-8bd2-73ef737859db00'
header = dict(string, string)
header["X-API-Key"] = API_KEY
params = dict(string, ANY)
params["code"] = "2330 TT Equity"
params["start_date"] = "2026-01-01"
params["end_date"] = "2026-01-03"
url = "https://api.one10.com/API/module6"
resp = httpClient::httpGet(url=url, params=params, timeout=20000, headers=header)
/*
resp["text"] contains a JSON string like:
'[{"code":"2330 TT Equity","da":"2026-01-01","r_z_s":1.0339084316470313,"r_z_all":14.902139570270752,"r_z_gics":9.615418377056802,"r_z_sub_gics":15.815752978952029,"r_z_top50cap":null},
{"code":"2330 TT Equity","da":"2026-01-02","r_z_s":1.0339084316470313,"r_z_all":14.902126873959881,"r_z_gics":9.615407199304759,"r_z_sub_gics":15.815691199960133,"r_z_top50cap":2.1884785540779355},
{"code":"2330 TT Equity","da":"2026-01-03","r_z_s":1.0339084316470313,"r_z_all":14.902110479550133,"r_z_gics":9.61539498129776,"r_z_sub_gics":15.815691199960133,"r_z_top50cap":null}]'
*/
respData = fromStdJson(resp["text"]);
typestr(respData) // ANY VECTOR
typestr(respData[0]) // STRING -> ANY DICTIONARY
respData 是一个字典对象的向量。每个字典都具备相同的键(code、da、r_z_s、r_z_all、r_z_gics、r_z_sub_gics、r_z_top50cap),值的类型混合(STRING、DATE、DOUBLE,或NULL)。我想把这些数据存储到DolphinDB的内存表中,表有3 行、7列。
我目前的尝试如下:
-
table(respData)
这会创建一个只有单列respData的表,每一行包含整個字典,而不是展开后的列。 -
each(transpose, respData)
each(transpose, respData)
这会报错:
Usage: transpose(X). If X is a dictionary, its value type [VOID] can't serve as a table column's type.
- 提取键和值
我尝试从第一份字典中获取键,然后再从所有字典中收集值,但respData是ANY VECTOR类型,其元素(字典)在此上下文中没有可用的values()方法。
cols = respData[0].keys() // returns the list of keys
rows = respData.values() // Error: values method not supported for ANY type.
如何将这个字典向量转换成一个正确的DolphinDB表,使每个字典成为一行、每个键成为一列?
解决方案
你有没有尝试过parseJsonTable函数?
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。