如何用kdb+将Cryptostats返回的嵌套JSON转换为数据表
将Cryptostats嵌套JSON转换为kdb+数据表
问题描述
我正尝试从Cryptostats获取数据,其返回结果为嵌套JSON格式,希望将其转换为包含所有字段的kdb+数据表。目前已有的kdb+代码如下:
query:"https://api.cryptostats.community/api/v1/fees/oneDayTotalFees/2023-02-07"; raw:.Q.hg query; res:.j.k raw;
解决方案
Cryptostats返回的JSON为嵌套结构(含字典、列表嵌套),.j.k解析后得到嵌套的字典/列表,需展平结构才能生成标准kdb+数据表,具体步骤如下:
1. 递归展平嵌套字典
编写递归函数,将嵌套字典的子字段转为顶层字段(用.连接父/子字段名):
// 递归展平嵌套字典 flattenDict:{[d] $[ 99h=type d; // 判断是否为字典类型 raze {[k;v] $[99h=type v; (k,".",')'flattenDict v; (enlist k)!enlist v] }[;] each d; enlist d ] };
2. 生成数据表
对解析后的每个JSON条目应用展平函数,再合并为数据表:
// 展平所有数据条目 flattened:flattenDict each res; // 合并展平后的字典为数据表 finalTable:flip raze each flattened;
3. 处理数组字段(可选)
若嵌套结构包含数组类型字段,可将其展开为多行(以data.fees数组字段为例):
// 展开指定数组字段为多行 expandArray:{[tbl;col] raze {[row] $[0<count row[col]; update col:x from row where x in row[col]; enlist row] } each tbl }; // 应用展开函数 finalTable:expandArray[finalTable;`data.fees];
结果验证
执行代码后,finalTable即为包含嵌套JSON所有字段的kdb+数据表,直接输入变量名即可查看完整结构与数据。
内容的提问来源于stack exchange,提问作者BlackPearl
相关产品推荐
相关产品推荐

