[英]Converting a mysql dict column using JSON_Table
Edited
我有一個 mysql 表“prop”,其中包含一個包含 dict 字段的“detail”列。
fnum details
55 '{"a":"3"},{"b":"2"},{"d":"1"}'
我試圖將其轉換為表格。 用這個
SELECT p.fnum, deets.*
FROM prop p
JOIN JSON_TABLE( p.details,
'$[*]'
COLUMNS (
idx FOR ORDINALITY,
a varChar(10) PATH '$.a',
b varchar(20) PATH '$.b'
d varchar(45) PATH '$.d',
)
) deets
我嘗試了各種路徑,包括 $.*。 我期待以下內容:
fnum a b d
55 3 2 1
如果我有 2 行,例如
fnum details
55 '{"a":"3"},{"b":"2"},{"d":"1"}'
56 '{"c":"car"}'
應該生成以下內容
fnum a b d c
55 3 2 1 null
56 null null null car
您的詳細信息數據無效 JSON,因為它沒有[ ]
分隔數組。
演示:
mysql> create table prop (fnum int, details json);
mysql> insert into prop select 55, '{"a":"3"},{"b":"2"},{"d":"1"}';
ERROR 3140 (22032): Invalid JSON text: "The document root must
not be followed by other values." at position 9 in value for column
'prop.details'.
mysql> insert into prop select 55, '[{"a":"3"},{"b":"2"},{"d":"1"}]';
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
值得使用 JSON 數據類型而不是將 JSON 存儲在文本列中,因為 JSON 數據類型確保文檔是有效的 JSON 格式。 必須有效 JSON 才能使用 JSON_TABLE() function 或任何其他 JSON function。
此外,您的查詢在逗號方面存在一些語法錯誤:
SELECT p.fnum, deets.*
FROM prop p
JOIN JSON_TABLE( p.details,
'$[*]'
COLUMNS (
idx FOR ORDINALITY,
a varChar(10) PATH '$.a',
b varchar(20) PATH '$.b' <-- missing comma
d varchar(45) PATH '$.d', <-- extra comma
)
) deets
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.