簡體   English   中英

使用 JSON_Table 轉換 mysql dict 列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM