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 ...将产生一个带有键a和b的映射。
INSERT JSON
对于INSERT语句,可以使用JSON关键字将JSON编码的映射作为一行插入。JSON映射的格式通常应该与同一个表上SELECT JSON语句返回的格式匹配。特别是,区分大小写的列名应该用双引号括起来。例如,要插入到一个有两列名为myKey和value的表中,可以执行以下操作:
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位整数。 |