<p>我在 MySQL 数据库中有一个列,其中包含 <code>json</code> 格式值的 <code>python 列表</code>,如下所示:</p>
<table class="s-table">
<thead>
<tr>
<th>列</th>
</tr>
</thead>
<tbody>
<tr>
<td>[{"name":"me","color":"red"} , {"name":"you","color":"blue"}]</td>
</tr>
</tbody>
</table>
<p>我无法使用 <code>json_extract()</code> 函数,因为它的格式与 <code>json</code> 不完全相同</p>
<p>我想提取新列中格式化的每个 <code>json</code> ,如下所示:</p>
<table class="s-table">
<thead>
<tr>
<th>第一列</th>
<th>第二列</th>
</tr>
</thead>
<tbody>
<tr>
<td>{“名称”:“我”,“颜色”:“红色”}</td>
<td>{"name":"you","color":"blue"}</td>
</tr>
</tbody>
</table></p>
以下查询结合字符串操作函数
SUBSTRING_INDEX、REPLACE和CONCAT将获得预期结果。SELECT CONCAT('{', REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(`column`, '}', 1), '{', -1), '\\"', '"'), '}') AS First_column, CONCAT('{', REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(`column`, '}', 2), '{', -1), '\\"', '"'), '}') AS Second_column FROM mytable;这里是使用 DBFIDDLE 的工作演示
这给了我预期的输出:
请将
mytable替换为 your_actual_table_name,并将column替换为您的实际列名称。我用反引号包围了列,因为列是 sql 中的保留关键字。您应该能够在问题中包含的示例列上使用 JSON_EXTRACT:
SET @column = '[{"name":"me","color":"red"} , {"name":"you","color":"blue"}]'; SELECT JSON_EXTRACT(@column, '$[0]') AS First_column, JSON_EXTRACT(@column, '$[1]') AS Second_column;输出: