1. 程式人生 > >mysql中對比 JSON_VALUE 與 JSON_QUERY

mysql中對比 JSON_VALUE 與 JSON_QUERY

1. JSON概述

MySQL裡的json分為json array和json object。 $表示整個json物件,在索引資料時用下標(對於json array,從0開始)或鍵值(對於json object,含有特殊字元的key要用"括起來,比如$."my name")。

例如:[3, {"a": [5, 6], "b": 10}, [99, 100]],那麼:

$[0]:3

$[1]: {"a": [5, 6], "b": 10}

$[2] :[99, 100]

$[3] : NULL

$[1].a:[5, 6]

$[1].a[1]:6

$[1].b:10

$[2][0]:99

 

2.JSON_VALUE 和 JSON_QUERY 之間的主要區別在於 JSON_VALUE 返回標量值,而 JSON_QUERY 返回陣列或物件。

 

例一:請參考以下示例 JSON 文字。

JSON
{
    "a": "[1,2]",
    "b": [1, 2], "c": "hi" } 

在此示例 JSON 文字中,資料成員“a”和“c”是字串值,而資料成員“b”是陣列。 JSON_VALUE 和 JSON_QUERY 返回以下結果:

路徑
JSON_VALUE 返回 JSON_QUERY 返回
$ NULL 或錯誤 { "a": "[1,2]", "b": [1,2], "c":"hi"}
$.a [1,2] NULL 或錯誤
$.b NULL 或錯誤 [1,2]
$.b[0] 1 NULL 或錯誤
$.c hi NULL 或錯誤

 

 

 

 

 

 

 

 

 

例二:再舉一個實際的例子,兩種函式用法如下:

SELECT JSON_VALUE(inverstor_info_json, '$.inverstorScore.addrFlagScore') FROM `t_customer_score` WHERE id= 47178;
SELECT JSON_QUERY(inverstor_info_json, '$.famous') FROM `t_customer_score` WHERE id= 47178;
inverstor_info_json儲存文字格式舉例如下:
{"addrExist":"addrExist_1","addrFlag":"addrFlag_1","adjustScore":0,"best":0,"famous":0,"financing":"financing_1","incubator":"incubator_2","inverstorScore":{"addrExistScore":"0","addrFlagScore":"0","financingScore":"0.0","incubatorScore":"0"},"isStrategic":0,"noPhone":0,"professional":0,"straBest":0,"straFamous":0,"straProfessional":0,"strategicInvestment":""}