JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。

JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。 我们先看看MySQL老版本的JSON存取。

示例表结构:

CREATE TABLE json_test( id INT, person_desc TEXT )ENGINE INNODB; 
NSERT INTO json_test VALUES (1,'{   "programmers": [{     "firstName": "Brett",     "lastName": "McLaughlin",     "email": "aaaa"   }, {     "firstName": "Jason",     "lastName": "Hunter",     "email": "bbbb"   }, {     "firstName": "Elliotte",     "lastName": "Harold",     "email": "cccc"   }],   "authors": [{     "firstName": "Isaac",     "lastName": "Asimov",     "genre": "sciencefiction"   }, {     "firstName": "Tad",     "lastName": "Williams",     "genre": "fantasy"   }, {     "firstName": "Frank",     "lastName": "Peretti",     "genre": "christianfiction"   }],   "musicians": [{     "firstName": "Eric",     "lastName": "Clapton",     "instrument": "guitar"   }, {     "firstName": "Sergei",     "lastName": "Rachmaninoff",     "instrument": "piano"   }] }'); 

现在到了MySQL5.7,我们重新修改下表结构:

ALTER TABLE json_test MODIFY person_desc json; 
mysql> SELECT id,json_keys(person_desc) as "keys" FROM json_test\G *************************** 1. row ***************************  id: 1 keys: ["authors", "musicians", "programmers"]  row in set (0.00 sec) 
mysql> SELECT json_extract(AUTHORS,'$.lastName[0]') AS 'name', AUTHORS FROM   -> (   -> SELECT id,json_extract(person_desc,'$.authors[0][0]') AS "authors" FROM json_test   -> UNION ALL   -> SELECT id,json_extract(person_desc,'$.authors[1][0]') AS "authors" FROM json_test   -> UNION ALL   -> SELECT id,json_extract(person_desc,'$.authors[2][0]') AS "authors" FROM json_test   -> ) AS T1   -> ORDER BY NAME DESC\G *************************** 1. row ***************************   name: "Williams" AUTHORS: {"genre": "fantasy", "lastName": "Williams", "firstName": "Tad"} *************************** 2. row ***************************   name: "Peretti" AUTHORS: {"genre": "christianfiction", "lastName": "Peretti", "firstName": "Frank"} *************************** 3. row ***************************   name: "Asimov" AUTHORS: {"genre": "sciencefiction", "lastName": "Asimov", "firstName": "Isaac"} 3 rows in set (0.00 sec) 
mysql> SELECT   -> json_extract(AUTHORS,'$.firstName[0]') AS "firstname",   -> json_extract(AUTHORS,'$.lastName[0]') AS "lastname",   -> json_extract(AUTHORS,'$.genre[0]') AS "genre"   -> FROM   -> (   -> SELECT id,json_extract(person_desc,'$.authors[0]') AS "authors" FROM json _test   -> ) AS T\G *************************** 1. row *************************** firstname: "Isaac"  lastname: "Asimov"   genre: "sciencefiction"  row in set (0.00 sec) 
mysql> UPDATE json_test   -> SET person_desc = json_remove(person_desc,'$.authors')\G Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 
mysql> SELECT json_contains_path(person_desc,'all','$.authors') as authors_exist s FROM json_test\G *************************** 1. row *************************** authors_exists: 0  row in set (0.00 sec) 

总结

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Android(安卓)- Manifest 文件 详解
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. Selector、shape详解(一)
  5. Android开发从零开始之java-泛型初步
  6. 链接器解析多重定义的全局变量
  7. android2.2资源文件详解4--menu文件夹下的菜单定义
  8. android Uri获取真实路径转换成File的方法
  9. Android发送短信方法实例详解

随机推荐

  1. Python告诉你想开一家美食店该怎么做
  2. 技术解析|如何绘制密度分布图
  3. 动画:面试算法之重建二叉树
  4. 不能再简单了|手把手教你爬取美国疫情实时
  5. 一次爬美团网美食团购的经历
  6. 那些年,我在大学接过的外包项目
  7. JDBC自定义工具类(properties配置文件方式
  8. COVID-19每日据整理|04-02
  9. 怎样绘制漂亮的统计图表|第一期
  10. 手把手教你调试代码并使用Echarts进行数