MySQL JSONArray 转列

引言

在日常的开发中,我们经常会遇到将 JSON 数组转换成列的需求。MySQL 是一种流行的关系型数据库,它也提供了一些函数来处理 JSON 数据。本文将介绍如何在 MySQL 中将 JSON 数组转换成列,并给出相应的代码示例。

JSON 数据与关系型数据的转换

JSON(JavaScript Object Notation)是一种常用的数据交换格式,它以简洁的方式表示结构化数据。关系型数据库则是一种以表格形式存储数据的方式。在将 JSON 数据转换成关系型数据时,需要进行一定的结构化处理。

MySQL 从版本 5.7 开始引入了 JSON 数据类型,并提供了一些函数来处理 JSON 数据。其中,JSON_ARRAY() 函数可以将多个值转换为 JSON 数组,JSON_EXTRACT() 函数可以获取 JSON 数据中的指定值。

示例

为了更好地理解如何将 JSON 数组转换成列,下面我们给出一个示例。

假设有如下的 JSON 数据:

[
  {"name": "Alice", "age": 20, "city": "New York"},
  {"name": "Bob", "age": 25, "city": "San Francisco"},
  {"name": "Charlie", "age": 30, "city": "Los Angeles"}
]

我们需要将上述的 JSON 数据转换成如下的表格形式:

name age city
Alice 20 New York
Bob 25 San Francisco
Charlie 30 Los Angeles

下面是实现这个转换的代码示例:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  age INT,
  city VARCHAR(50)
);

INSERT INTO users (name, age, city)
SELECT
  JSON_EXTRACT(data, '$.name'),
  JSON_EXTRACT(data, '$.age'),
  JSON_EXTRACT(data, '$.city')
FROM
  JSON_TABLE(
    '[{"name": "Alice", "age": 20, "city": "New York"},{"name": "Bob", "age": 25, "city": "San Francisco"},{"name": "Charlie", "age": 30, "city": "Los Angeles"}]',
    '$[*]'
    COLUMNS(
      data JSON PATH '$'
    )
  ) AS jt;

上述代码首先创建了一个名为 users 的表,然后使用 JSON_TABLE() 函数从 JSON 数据中解析出每条记录,并插入到 users 表中。

关系图

下面是示例中的关系图:

erDiagram
    users {
        id INT
        name VARCHAR(50)
        age INT
        city VARCHAR(50)
    }

类图

下面是示例中的类图:

classDiagram
    User {
        id: INT
        name: VARCHAR(50)
        age: INT
        city: VARCHAR(50)
    }

总结

本文介绍了如何在 MySQL 中将 JSON 数组转换成列。通过使用 JSON 数据类型以及相应的函数,我们可以很方便地处理 JSON 数据。在实际开发中,我们可以根据具体的需求,灵活运用这些技巧。

希望本文对你理解如何处理 JSON 数据有所帮助!