色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql讀取json字段不完整

林玟書1年前9瀏覽0評論

最近遇到了一個問題,就是在使用 MySQL 讀取 JSON 字段時,發(fā)現(xiàn)返回的數(shù)據(jù)不完整,只能讀取到一部分,經(jīng)過一番搜索和嘗試,終于找到了解決方法,現(xiàn)在分享給大家。

首先看一下我的表結(jié)構(gòu):

CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT '',
`json_content` json DEFAULT NULL,
PRIMARY KEY (`id`)
);

其中,json_content字段就是我存儲 JSON 數(shù)據(jù)的字段。

接下來,我們來看一下讀取 JSON 字段的代碼:

SELECT json_content->"$.key" as key_value FROM test;

上面的代碼可以讀取 JSON 數(shù)據(jù)中指定key的值,但是在我的實(shí)際應(yīng)用中,卻發(fā)現(xiàn)了一個問題:有些key的值無法正確讀取。

經(jīng)過分析,發(fā)現(xiàn)問題出在了 MySQL 的默認(rèn)行為上,當(dāng)讀取 JSON 字段時,會默認(rèn)將字段中出現(xiàn)的轉(zhuǎn)義字符還原成原本的字符,比如\n會被還原成換行符,但是有些轉(zhuǎn)義字符卻不會被還原,比如\',這就導(dǎo)致了讀取到的 JSON 數(shù)據(jù)是不完整的。

為了解決這個問題,我們可以使用 MySQL 提供的函數(shù)json_unquote(),它可以將 JSON 字符串中的引號去掉,并且會將轉(zhuǎn)義字符還原成原始字符,這樣就可以保證讀取到的 JSON 數(shù)據(jù)是完整的了。

修改后的代碼如下所示:

SELECT json_unquote(json_content->"$.key") as key_value FROM test;

這樣我們就可以正確讀取到 JSON 數(shù)據(jù)了。