[英]how to extract and zip values from json with SQL, mysql
我努力從 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}]
謝謝
這是使用 MySQL 8.0 的JSON_TABLE() function的解決方案:
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 文檔提取到客戶端應用程序中,您可以在其中將其反序列化為數據結構以在代碼中進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.