JSON支持SELECT和INSERT语句。这种支持并没有从根本上改变cql api,例如,模式仍然是强制的。它只是提供了一种使用JSON文档的方便方法。Lindorm CQL支持将多个列的数据按照JSON的格式进行输入和输出。

SELECT JSON

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

结果映射键与普通结果集中的列名相同。例如,SELECT JSON a,b FROM ...将产生一个带有键ab的映射。然而,这是一个值得注意的例外,对于INSERT JSON行为的对称性,带有大写字母的区分大小写的列名将被双引号包围。例如,选择JSON myColumn FROM ...将产生一个映射键“\”myColumn\“”(注意转义引号)。映射值将是结果集值的JSON编码表示。

INSERT JSON

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

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

默认情况下或者如果显式使用default NULL,JSON映射中省略的列将被设置为NULL,这意味着该列的任何预先存在的值都将被删除(从而创建一个tombstone)。或者,如果在值之后使用默认的UNSET指令,则省略的列值将保持未设置,这意味着这些列的预先存在的值将被保留。

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. 字符串可以是表示datas的格式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位整数。