JSON支持SELECT和INSERT语句。但是Json format的支持并没有从根本上改变cql api的使用方式,CQL 需要的数据定义模型还是必须定义的。JSON format的使用只是提供了一种使用JSON方式的方法。Lindorm CQL支持将多个列的数据按照JSON的格式进行输入和输出。

SELECT JSON

对于SELECT语句,可以使用JSON关键字将每一行作为单个JSON编码的映射返回。SELECT语句行为的其余部分是相同的。

结果映射键与普通结果集中的列名相同。例如,SELECT JSON a,b FROM ...将产生一个带有键ab的映射。

INSERT JSON

对于INSERT语句,可以使用JSON关键字将JSON编码的映射作为一行插入。JSON映射的格式通常应该与同一个表上SELECT JSON语句返回的格式匹配。特别是,区分大小写的列名应该用双引号括起来。例如,要插入到一个有两列名为myKeyvalue的表中,可以执行以下操作:

INSERT INTO persioninfo JSON '{ "c1": "key", "c2": "value"}'

默认情况下或者显式使用default NULL,JSON映射中省略的列将被设置为NULL,这意味着该列的任何预先存在的值都将被删除。

JSON Encoding of CQL Data Types

在可能的情况下,Lindorm CQL将在原生JSON表示中表示和接受数据类型。Lindorm CQL还将接受与所有单个字段类型的Lindorm CQL文本格式匹配的字符串表示。例如,float、int、uuid和dates可以由Lindorm CQL文本字符串表示。

下表描述了Lindorm CQL在INSERT JSON值(和fromJson()参数)中接受的编码,以及Lindorm CQL在返回SELECT JSON语句(和fromJson())数据时使用的格式:
数据类型 接受的格式 返回的格式 描述
ascii string string 使用JSON的\u字符转义。
bigint integer, string integer 字符串必须是有效的64位整数。
blob string string 字符串应为0x,后跟偶数个十六进制数字。
boolean boolean, string boolean 取值为true或者false
date string string Date格式为YYYY-MM-DD,时区为UTC。
decimal integer, float, string float 可能超过32或64位IEEE-754浮点精度。
double integer, float, string float 字符串必须是有效的整数或浮点。
float integer, float, string float 字符串必须是有效的整数或浮点。
inet string string IPv4 or IPv6 address。
int integer, string integer 字符串必须是有效的32位整数。
smallint integer, string integer 字符串必须是有效的16位整数。
text string string 使用JSON的\u字符转义。
time string string 时间格式为hh-mm-ss[.fffffffff]
timestamp integer, string string 时间戳timestamp。时间戳格式为YYYY-MM-DD hh:mm:ss.SSS
timeuuid string string Type 1 UUID。
tinyint integer, string integer 8位有效的整数。
uuid string string uuid的格式字符串。
varint integer, string integer 可变长度;可能在客户端解码器中溢出32位或64位整数。