Home > Database > Mysql Tutorial > How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?

How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?

DDD
Release: 2024-12-01 21:50:13
Original
238 people have browsed it

How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?

Generating Nested JSON Objects in MySQL with Native JSON Functions

MySQL native JSON functions provide a powerful mechanism for working with JSON data within the database. When dealing with relational tables containing one-to-many relationships, generating nested JSON objects can be challenging. In this article, we will explore how to achieve nested JSON objects using MySQL's native JSON functions.

The Problem

Consider the following scenario:

CREATE TABLE `parent_table` (
   `id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`)
);
CREATE TABLE `child_table` (
   `id` int(11) NOT NULL,
   `parent_id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`,`parent_id`)
);
Copy after login
insert `parent_table` values (1,'parent row 1');
insert `child_table` values (1,1,'child row 1');
insert `child_table` values (2,1,'child row 2');
Copy after login

The goal is to generate a JSON document that resembles the following:

[
    {
        "id" : 1,
        "desc" : "parent row 1",
        "child_objects" : [{
                "id" : 1,
                "parent_id" : 1,
                "desc" : "child row 1"
            }, {
                "id" : 2,
                "parent_id" : 1,
                "desc" : "child row 2"
            }
        ]
    }
]
Copy after login

The Solution

The key to generating nested JSON objects lies in the GROUP_CONCAT function. By combining the GROUP_CONCAT function with the JSON_OBJECT function, we can concatenate multiple JSON objects into a single array.

Consider the following query:

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',(select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(
                    'id',id,'parent_id',parent_id,'desc',`desc`)),
                ']')
         AS JSON) from child_table where parent_id = p.id)

 ) from parent_table p;
Copy after login

This query generates the desired nested JSON object by first using GROUP_CONCAT to concatenate the JSON objects for child rows into a JSON array. Then, the CONCAT function is used to wrap the JSON array in square brackets and create a valid JSON string. Finally, the CAST function converts the string into a JSON object.

Conclusion

By leveraging the GROUP_CONCAT and JSON_OBJECT functions, we can generate complex nested JSON objects from relational tables in MySQL using native JSON functions. This capability unlocks the potential for efficient data manipulation and exchange using JSON in MySQL.

The above is the detailed content of How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template