[英]Extract key-pair values from JSON objects in MySQL
從 MySQL JSON 數據字段中,我從數組中提取數據,如下所示:
SELECT
data ->> '$.fields[*]' as fields
FROM some_database...
返回:
[{
"id": 111056,
"hint": null,
"slug": "email",
"label": "E-mail",
"value": null,
"field_value": "test@example.com",
"placeholder": null
}, {
"id": 111057,
"hint": null,
"slug": "name",
"label": "Imię",
"value": null,
"field_value": "Aneta",
"placeholder": null
}]
我還可以提取單列:
SELECT
data ->> '$.fields[*].field_value' as fields
FROM some_database...
並返回以下結果:
[test@example.com, Aneta]
但是如何將field_value
label
提取為密鑰對?
首選 output 將是包含對的單個多行字符串:
label: field_value
label: field_value
...
使用上面顯示的示例,它會讓我關注 output:
E-mail: test@example.com
Imię: Aneta
首選單線,因為我有多個這樣的 arrays 可以從各個領域中提取。
這是將鍵名提取為行的示例:
select j.keyname from some_database
cross join json_table(
json_keys(data->'$[0]'),
'$[*]' columns (
keyname varchar(20) path '$'
)
) as j;
Output:
+-------------+
| keyname |
+-------------+
| id |
| hint |
| slug |
| label |
| value |
| field_value |
| placeholder |
+-------------+
現在您可以將其加入值:
select n.n, j.keyname,
json_unquote(json_extract(f.data, concat('$[', n.n, ']."', j.keyname, '"'))) as value
from some_database as d
cross join json_table(
json_keys(d.data->'$[0]'),
'$[*]' columns (
keyname varchar(20) path '$'
)
) as j
cross join n
join some_database as f on n.n < json_length(f.data);
Output:
+---+-------------+------------------+
| n | keyname | value |
+---+-------------+------------------+
| 0 | id | 111056 |
| 0 | hint | null |
| 0 | slug | email |
| 0 | label | E-mail |
| 0 | value | null |
| 0 | field_value | test@example.com |
| 0 | placeholder | null |
| 1 | id | 111057 |
| 1 | hint | null |
| 1 | slug | name |
| 1 | label | Imię |
| 1 | value | null |
| 1 | field_value | Aneta |
| 1 | placeholder | null |
+---+-------------+------------------+
我正在使用一個只填充整數的實用程序表n
。
create table n (n int primary key);
insert into n values (0),(1),(2),(3)...;
如果這看起來像很多復雜的工作,那么當您希望 SQL 表達式在 Z0ECD11C1D7A287401D148A23BBD7 文檔中的離散字段上工作時,可能的教訓是在 JSON 中存儲數據並不容易。
您可以使用JSON_VALUE :
select JSON_VALUE (json_value_col, '$.selected_key') 作為來自 user_details 的 selected_value;
您還可以使用JSON_EXTRACT :
select JSON_EXTRACT (json_value_col, '$.selected_key') 作為來自 user_details 的 selected_value;
有關詳細信息,請參閱: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.