眨眼間,有一小段時間沒有更新文章了。唉,又懶了..。你是否還記得,以前寫過的《說說 MySQL JSON 數據類型》這篇文章,在這篇文章中,咱們簡單的介紹了MySQL JSON函數。可是在實際操做中。還有更多的實用操做沒有介紹。如: JSON字符串如何搜索?如何獲取JSON字符串中特定的屬性?能不能批量替換JSON中特定key?等等。別急,咱們就在下面給出答案。mysql
數據以下所示:sql
create table t_base_data( id bigint(20) not null primary key auto_increment comment "主鍵", content json null comment "內容", created_at datetime null comment "建立時間", updated_at datetime null comment "修改時間" ) engine=innodb charset=utf8 -- 初始化數據: INSERT INTO `t_base_data` (`id`, `content`, `created_at`, `updated_at`) VALUES ('1', '{\"blog\": \"www.andyqian.com\", \"name\": \"andyqian\"}', NULL, '2018-04-08 11:19:44');
操做數據庫版本:5.7.20數據庫
當咱們須要獲取JSON字符串中的某個key值時。咱們能夠經過以下方式:json
以下所示:微信
mysql> select content->"$.blog" from t_base_data; +--------------------+ | content->"$.blog" | +--------------------+ | "www.andyqian.com" | +--------------------+ 1 row in set (0.00 sec
2.列名->>key 爲提供轉義後的字符。
以下所示:app
mysql> select content->>"$.blog" from t_base_data; +--------------------+ | content->>"$.blog" | +--------------------+ | www.andyqian.com | +--------------------+ 1 row in set (0.00 sec)
函數:JSON_EXTRA(JSON串, 操做符)。
用途: 用戶提取JSON屬性。函數
使用例子:spa
mysql> SELECT JSON_EXTRACT('{"blog":"www.andyqian.com","name": "andyqian"}' ,'$.blog'); +--------------------------------------------------------------------------+ | JSON_EXTRACT('{"blog":"www.andyqian.com","name": "andyqian"}' ,'$.blog') | +--------------------------------------------------------------------------+ | "www.andyqian.com" | +--------------------------------------------------------------------------+ 1 row in set (0.00 sec)
在Java中,附加字符串,咱們一般可使用append()方法進行操在MySQL中,varchar數據類型,咱們也可使用concat函數進行追加。一樣的,在JSON操做中,MySQL也給咱們提供了對應的函數:JSON_INSERT。
使用例子以下:.net
mysql> set @info = '{"blog":"www.andyqian.com","name": "andyqian"}'; Query OK, 0 rows affected (0.00 sec) mysql> select json_insert(@info,"$.email","andytohome@gmail.com"); +-----------------------------------------------------------------------------------+ | json_insert(@info,"$.email","andytohome@gmail.com") | +-----------------------------------------------------------------------------------+ | {"blog": "www.andyqian.com", "name": "andyqian", "email": "andytohome@gmail.com"} | +-----------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
這裏須要注意的是: 若是新增的屬性已存在。該屬性不會被新增。設計
有了新增。在批量修改指定JSON內容的值時。替換可少不了。如今咱們介紹下面這個函數json_replace函數。
使用方法以下所示:
mysql> set @info = '{"blog":"www.andyqian.com","name": "andyqian"}'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT json_replace(@info, '$.name', "juqian"); +------------------------------------------------+ | json_replace(@info, '$.name', "juqian") | +------------------------------------------------+ | {"blog": "www.andyqian.com", "name": "juqian"} | +------------------------------------------------+ 1 row in set (0.00 sec)
這個語句的意思爲: 咱們須要替換
{"blog":"www.andyqian.com","name": "andyqian"}
中的name屬性的值爲juyuqian
。
注意: 上面咱們是直接使用key的名稱,來進行查找。其實。咱們還可使用角標的方式。進行查找。例如在上述語句中,咱們能夠將$.name
修改成$[1]
也是能夠的。
有了新增,替換,固然還少不了刪除了。下面咱們就介紹json_remove函數
mysql> select json_remove('{"blog":"www.andyqian.com","name": "andyqian"}' , '$.blog'); +--------------------------------------------------------------------------+ | json_remove('{"blog":"www.andyqian.com","name": "andyqian"}' , '$.blog') | +--------------------------------------------------------------------------+ | {"name": "andyqian"} | +--------------------------------------------------------------------------+ 1 row in set (0.00 sec)
咱們只須要指定,須要remove的key值便可。
若是對上面的JSON操做,以爲一會兒適應不過來。咱們能夠當作是在Java中操做fastjson來進行JSON操做同樣。就容易理解一些了。
相關閱讀:
掃碼關注,一塊兒進步
我的博客: http://www.andyqian.com