KDB:如何解析json文件



我创建了一个JSON格式的配置文件,我想使用KDB将其作为字典读取。

在Python中,这很容易:

with open('data.json') as f:
data = json.load(f)

KDB中有类似的功能吗?

要将JSON文件读取到kdb+中,应该使用read0。这将以字符串列表的形式返回文件中的行。

q)read0`:sample.json
,"{"
""name":"John","
""age":30,"
""cars":[ "Ford", "BMW", "Fiat" ]"
,"}"

kdb+允许使用.j命名空间将JSON对象去串行化(和串行化(到字典。内置的.j.k期望一个包含json的字符串,并将其转换为字典。应该使用raze来压平我们的字符串列表:

q)raze read0`:sample.json
"{"name":"John","age":30,"cars":[ "Ford", "BMW", "Fiat" ]}"

最后,在此字符串上使用.j.k生成字典

q).j.k raze read0`:sample.json
name| "John"
age | 30f
cars| ("Ford";"BMW";"Fiat")

对于特别大的JSON文件,在文件中使用read1而不是raze read0可能更有效,例如

q).j.k read1`:sample.json
name| "John"
age | 30f
cars| ("Ford";"BMW";"Fiat")

如果您对反向操作感兴趣,可以使用.j.j将字典转换为字符串列表,并使用0:进行保存。

关于.j名称空间的更多信息可以在这里找到。您还可以在Kx wiki上看到更多read0、read1和0:的示例。

使用JSON由.j命名空间处理,其中.j.j序列化消息,.j.k取消序列化消息。请注意,首先需要使用raze将JSON转换为单个字符串。

Kx维基上有更多可用的信息,其中提供了以下示例:

q).j.k "{"a":[0,1],"b":["hello","world"]}"
a| 0       1
b| "hello" "world"

使用.j.j时,kdb中的符号和字符串都将被编码为JSON字符串,而kdb将把JSON字符串解码为kdb字符串,除非它们将是符号的键。

要用JSON对kdb表进行编码,应该发送一个具有相同键的对象数组。kdb还将表编码为JSON中的对象数组。

q).j.k "[{"a":1,"b":2},{"a":3,"b":4}]"
a b
---
1 2
3 4

当对q进行编码时,将使用P的值来选择精度,默认情况下为7,这可能会导致不必要的舍入。

这可以更改为0,表示最大精度,尽管最后的数字不可靠,如下所示。查看此处了解更多信息https://code.kx.com/q/ref/cmdline/#-p显示精度。

q).j.j 1.000001 1.0000001f
"[1.000001,1]"
q)P 0
q).j.j 1.000001 1.0000001f
"[1.0000009999999999,1.0000001000000001]"

相关内容

  • 没有找到相关文章

最新更新