我很難從 MySQL 中的 JSON 列中提取所需的值。想象一下變數:
SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
我需要提取并回傳一個僅包含選定鍵值對的新 JSON 陣列,例如:只有 a 和 b,如果所需的鍵不存在,我想為該鍵回傳 null:
[{"a": 1, "b": 2},{"a": 3, "b": 4},{"a": 5, "b": null}]
謝謝
uj5u.com熱心網友回復:
這是使用 MySQL 8.0 的JSON_TABLE() 函式的解決方案:
mysql> SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
Query OK, 0 rows affected (0.00 sec)
mysql> select j.* from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
------ ------
| a | b |
------ ------
| 1 | 2 |
| 3 | 4 |
| 5 | NULL |
------ ------
3 rows in set (0.00 sec)
基于這個結果,我們可以構建一個新的 JSON 物件陣列:
mysql> select json_arrayagg(json_object('a', j.a, 'b', j.b)) as new
from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
-----------------------------------------------------------
| new |
-----------------------------------------------------------
| [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": null}] |
-----------------------------------------------------------
如果您使用的是 MySQL 5.x,我建議您將整個 JSON 檔案獲取到客戶端應用程式,您可以將其反序列化為資料結構以在代碼中進行操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457450.html
標籤:mysql sql mysql-json
