MySQL 解析数组 JSON

MySQL 解析数组 JSON

MySQL 解析数组 JSON

MySQL 中,JSON 类型的数据存储和处理越来越常见。而经常情况下,我们会需要解析 JSON 数据中的数组。本文将介绍如何在 MySQL 中解析数组类型的 JSON 数据。

什么是 JSON 数据类型

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在客户端和服务器之间传输数据。在 MySQL 中,JSON 数据类型是一种新加入的数据类型,可以存储 JSON 格式的数据。

一个简单的 JSON 数组如下所示:

["apple", "banana", "cherry"]

解析 JSON 数组

在 MySQL 中,我们可以使用一些内置的函数来解析 JSON 数组中的数据。

JSON_EXTRACT

JSON_EXTRACT 函数可以用来提取 JSON 数据中的特定值。

语法如下:

JSON_EXTRACT(json_doc, path)

其中 json_doc 是 JSON 字符串,path 是要提取的路径。路径格式类似于 JavaScript 对象的访问路径。

例如,我们有一个名为 fruits 的表,其中有一个名为 data 的 JSON 字段包含了水果的数组数据:

id data
1 ‘[“apple”, “banana”, “cherry”]’
2 ‘[“orange”, “grape”, “kiwi”]’

我们可以使用以下查询来提取所有水果数据:

SELECT JSON_EXTRACT(data, "$[*]") AS fruits FROM fruits;

这将返回以下结果:

fruits
[“apple”, “banana”, “cherry”]
[“orange”, “grape”, “kiwi”]

JSON_TABLE

JSON_TABLE 函数可以将 JSON 数据解析为表格形式。

语法如下:

JSON_TABLE(json_doc, path COLUMNS (column_list) [AS alias])

其中 json_doc 是 JSON 字符串,path 是要提取的路径,column_list 是要提取的列名。

例如,我们可以使用 JSON_TABLE 来将 JSON 数据解析为表格:

SELECT j.*
FROM fruits,
JSON_TABLE(fruits.data, "[*]" COLUMNS (
  fruit VARCHAR(50) PATH ''
)) AS j;

这将返回以下结果:

fruit
apple
banana
cherry
orange
grape
kiwi

实际案例

假设我们有一个名为 orders 的表,其中有一个名为 products 的 JSON 字段,存储了每个订单中的产品数据:

order_id customer_name products
1 ‘Alice’ ‘[{“id”: 1, “name”: “Apple”, “quantity”: 3}, {“id”: 2, “name”: “Banana”, “quantity”: 2}]’
2 ‘Bob’ ‘[{“id”: 3, “name”: “Orange”, “quantity”: 5}, {“id”: 4, “name”: “Grape”, “quantity”: 1}]’

现在,我们想要提取出每个订单中的产品名称和数量:

SELECT o.order_id, o.customer_name, j.name, j.quantity
FROM orders o,
JSON_TABLE(o.products, "[*]" COLUMNS (
  name VARCHAR(50) PATH '.name',
  quantity INT PATH '$.quantity'
)) AS j;

这将返回以下结果:

order_id customer_name name quantity
1 Alice Apple 3
1 Alice Banana 2
2 Bob Orange 5
2 Bob Grape 1

总结

在 MySQL 中,解析 JSON 数组数据并不复杂,可以使用 JSON_EXTRACT 或 JSON_TABLE 函数来提取和解析 JSON 数据中的数组数据。通过这些函数,我们可以轻松地处理和分析包含数组的 JSON 数据。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程