HTTP调用kdb+返回非机器可读内容 如何获取JSON格式响应
kdb+ HTTP接口返回JSON格式解决方案
直接设置kdb+返回JSON(推荐方案)
kdb+ 3.5及以上版本内置.j.j序列化函数,可直接将q数据结构转换为标准JSON字符串,无需额外依赖。你只需要对原有代码做如下调整:
- 新增JSON响应包装逻辑,给返回结果加上正确的HTTP响应头,避免浏览器按纯文本处理
修改后的.q文件参考代码:
\p 8080 system["l db"] // 原有查询逻辑保持不变 getData: {[a;b] ?[table;((>=;`start;$[`long;a]);(<=;`end;$[`long;b]));0b;()]} // 新增HTTP JSON响应包装函数 getDataJson: {[a;b] queryRes: getData[a;b]; // 第一个元素为响应头字典,指定内容类型为JSON,第二个为序列化后的JSON字符串 (`Content-Type`application/json; .j.j queryRes) } h:hopen `:localhost:8080:user:pass
- 调用方式调整为请求新的包装函数,浏览器访问地址改为:
http://localhost:8080/?getDataJson[1;2]
此时返回结果就是标准JSON格式,可直接被机器解析。
注意:如果你的查询结果包含kdb+长整型(long)数据,JSON标准的数字精度最多支持53位,建议提前将长整型字段转为字符串避免精度丢失,可在
getData函数最后加入字段类型转换逻辑。
已有pre包裹纯文本结果的解析方案
如果你不方便修改后端kdb+代码,也可以对拿到的pre标签内文本做手动解析:
- 按换行符分割文本得到每一行数据
- 第一行为字段名行,按空格分割得到所有字段名
- 后续行按空格分割得到对应字段值,根据字段类型做转换后拼接为JSON对象即可
内容的提问来源于stack exchange,提问作者orr
相关产品推荐
相关产品推荐

