当表达式自身已经是以json_开头的名字,那么json_别名是不需要的。如,如果有一个列名为json_data的表,那么该列的值将不会转义。如果真希望它转义,可以使用一个除json_外的任何列名。如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> update ttlsa_users set json_data='\\website\\ - ""' where uid=888;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from ttlsa_users;
+-----+-------------+----------------------------------+---------------------+------------------------------------+
| uid | username | password | createtime | json_data |
+-----+-------------+----------------------------------+---------------------+------------------------------------+
| 888 | ttlsa_admin | 6a6e41c9b741f740cfa5f266b249d452 | 2013-08-10 11:27:01 | \website\ - "" |
+-----+-------------+----------------------------------+---------------------+------------------------------------+
1 row in set (0.00 sec)
mysql> select json_array(json_data) as userinfo from ttlsa_users;
+--------------------------------------+
| userinfo |
+--------------------------------------+
| [\website\ - ""] |
+--------------------------------------+
1 row in set (0.00 sec)
可以看到”和\没有转义。
1
2
3
4
5
6
7
mysql> select json_array(json_data xuhh) as userinfo from ttlsa_users;
+--------------------------------------------+
| userinfo |
+--------------------------------------------+
| ["\\website\\ - \"\""] |
+--------------------------------------------+
1 row in set (0.00 sec)
可以看到“和\都转义了。 直接的说就是定义别名。
4.2 json_object([arg1,..,argN])
json_object接受可变数目的参数,并将它们映射到JSON值,并返回一个关联数组。