JSONÊÇÒ»ÖÖÇáÁ¿¼¶µÄÊý¾Ý½»»»¸ñʽ£¬²ÉÓÃÁ˶ÀÁ¢ÓÚÓïÑÔµÄÎı¾¸ñʽ£¬ÀàËÆXML£¬µ«ÊDZÈXML¼òµ¥£¬Ò×¶Á²¢ÇÒÒ×±àд¡£¶Ô»úÆ÷À´ËµÒ×ÓÚ½âÎöºÍÉú³É£¬²¢ÇÒ»á¼õÉÙÍøÂç´ø¿íµÄ´«Êä¡£
JSONµÄ¸ñʽ·Ç³£¼òµ¥£ºÃû³Æ/¼üÖµ¡£Ö®Ç°MySQL°æ±¾ÀïÃæÒªÊµÏÖÕâÑùµÄ´æ´¢£¬ÒªÃ´ÓÃVARCHARҪôÓÃTEXT´óÎı¾¡£ MySQL5.7·¢²¼ºó£¬×¨ÃÅÉè¼ÆÁËJSONÊý¾ÝÀàÐÍÒÔ¼°¹ØÓÚÕâÖÖÀàÐ͵ļìË÷ÒÔ¼°ÆäËûº¯Êý½âÎö¡£ ÎÒÃÇÏÈ¿´¿´MySQLÀϰ汾µÄJSON´æÈ¡¡£
ʾÀý±í½á¹¹£º
CREATE TABLE json_test( id INT, person_desc TEXT )ENGINE INNODB;ÎÒÃÇÀ´²åÈëÒ»Ìõ¼Ç¼£º
I
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"
}]
}');
ÄÇÒ»°ãÎÒÃÇÓöµ½ÕâÑùÀ´´æ´¢JSON¸ñʽµÄ»°£¬Ö»ÄܰÑÕâÌõ¼Ç¼ȡ³öÀ´½»¸öÓ¦ÓóÌÐò£¬ÓÐÓ¦ÓóÌÐòÀ´½âÎö¡£
ÏÖÔÚµ½ÁËMySQL5.7£¬ÎÒÃÇÖØÐÂÐÞ¸Äϱí½á¹¹£º
ALTER TABLE json_test MODIFY person_desc json;
ÏÈ¿´¿´²åÈëµÄÕâÐÐJSONÊý¾ÝÓÐÄÄЩKEY£º mysql> SELECT id,json_keys(person_desc) as "keys" FROM json_test\G *************************** 1. row *************************** id: 1 keys: ["authors", "musicians", "programmers"] 1 row in set (0.00 sec)
ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÀïÃæÓÐÈý¸öKEY£¬·Ö±ðΪauthors£¬musicians£¬programmers¡£ÄÇÏÖÔÚÕÒÒ»¸öKEY°Ñ¶ÔÓ¦µÄÖµÄóöÀ´£º 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" 1 row in set (0.00 sec)
ÎÒÃǽøÒ»²½À´ÑÝʾ°Ñauthors Õâ¸öKEY¶ÔÓ¦µÄËùÓжÔÏóɾµô¡£
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
²éÕÒ϶ÔÓ¦µÄKEY£¬·¢ÏÖÒѾ±»É¾³ýµôÁË¡£ mysql> SELECT json_contains_path(person_desc,'all','$.authors') as authors_exist s FROM json_test\G *************************** 1. row *************************** authors_exists: 0 1 row in set (0.00 sec)
×ܽáÏ£¬ ËäÈ»MySQL5.7 ¿ªÊ¼Ö§³ÖJSONÊý¾ÝÀàÐÍ£¬µ«ÊÇÎÒ½¨ÒéÈç¹ûҪʹÓõϰ£¬×îºÃÊǰÑÕâÑùµÄֵȡ³öÀ´£¬È»ºóÔÚÓ¦ÓóÌÐò¶ÎÀ´¼ÆË㣬±Ï¾¹Êý¾Ý¿âÊÇÓÃÀ´´¦Àí¼òµ¥Êý¾ÝµÄ¡£
×÷Õߣºyueliangdao0608 ·¢±íÓÚ2015/11/10 15:10:01 ÔÎÄÁ´½Ó
ÔĶÁ£º0 ÆÀÂÛ£º0 ²é¿´ÆÀÂÛ
¡¡