mysql之json字段值查詢-JSON_CONTAINS、JSON_EXTRACT


一、JSON_CONTAINS

先來看看我百度到的定義和實例

 

  

============================================================================

解讀:參數主要有三個值,分別是json對象、值、json的具體key值(可缺省)

人話:前面包含后面為真則返回1(前面包含后面!!前面包含后面!!前面包含后面!!)

寫法:

1.select * from A where JSON_CONTAINS(json對象,值,json的某個key)

  • 完整簡單寫法(key的值也是一個json):select * from A where JSON_CONTAINS(@json,'1','$.keyname')  //篩選出json對象keyname這個key值包含1的記錄
  • 不帶path的寫法(第一個參數已經是想比對的json)select  JSON_CONTAINS(A.xx,'1') //根據A表xx字段(json值)是否包含1返回1或0
  • 結合JSON_ARRAY的寫法,如下,因為要前面包含后面,所以子集至少是[2,6]

  • 結合JSON_ARRAY寫法之篩選符合任意個數元素的記錄,此時把JSON_ARRAY放前面,匹配字段放后面(滿足需求:scene_id包含1或6就返回)

 

 

 

二、JSON_EXTRACT

 

 

 

==============================================================================

 解讀:提取json的key的值,如有多個則以數組返回

用法:可以用來判斷或提取值,后面可以加like或=等匹配詞,跟在select后面則返回符合的json字段值,跟在where后面則返回作為條件判斷

 

ps:

以上兩種寫法需要數據庫有執行權限,可能會報錯,eg:

 

 

需要給數據庫用戶加權限,eg

GRANT ALL PRIVILEGES ON *.* TO ‘用戶名’@’%’ ;
FLUSH PRIVILEGES;

 

三、符號寫法

 寫法:

字段名->"$.keyname.keyname......"

舉例說明:

 

 content字段是一個json值,層級結構如下,想獲取橙色字段值用於判斷,寫法如下

 

 

層層遞進到想要的字段,注意中間如果是數組還需定位到數組的第幾個元素

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM