简体   繁体   English

如何将 SQL 查询转换为 JSON 格式

[英]How to convert SQL Query to JSON format

I am trying to convert my SQL result into JSON format it's showing an error.我正在尝试将我的 SQL 结果转换为 JSON 格式,它显示错误。

SQL Query: SQL 查询:

 SELECT 
    User.name, 
    Course.title, 
    Member.role 
FROM User 
JOIN Member JOIN Course 
    ON User.user_id = Member.user_id 
    AND Member.course_id = Course.course_id 
ORDER BY 
    Course.title, 
    Member.role DESC, 
    User.name;

I have also tried FOR JSON PATH and FOR JSON AUTO but the following error is coming:我也尝试过 FOR JSON PATH 和 FOR JSON AUTO 但出现以下错误:

ERROR 1064 (42000): You have an error in your SQL syntax;错误 1064 (42000):您的 SQL 语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'for JSON AUTO' at line 1检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的“for JSON AUTO”附近使用的正确语法

You can use JSON_OBJECT() to generate valid json in MySQL.您可以使用JSON_OBJECT()在 MySQL 中生成有效的 json。

For example, this would generate a json object for each row, with keys user_name , course_title and member_role , in a column called js :例如,这将为每一行生成一个 json object,键为user_namecourse_titlemember_role ,在名为js的列中:

SELECT JSON_OBJECT(
    'user_name', User.name, 
    'course_title', Course.title, 
    'member_role', Member.role 
) as js
FROM User 
JOIN Member JOIN Course 
    ON User.user_id = Member.user_id 
    AND Member.course_id = Course.course_id 
ORDER BY 
    Course.title, 
    Member.role DESC, 
    User.name;

If you want a resultset made of a single row and a single column where all objects are aggregated in an array, you can use JSON_ARRAYAGG on top of JSON_OBJECT() :如果您想要一个由单行和单列组成的结果集,其中所有对象都聚合在一个数组中,您可以在JSON_OBJECT()之上使用JSON_ARRAYAGG

SELECT JSON_ARRAYAGG(js) js_array
FROM (
    SELECT JSON_OBJECT(
        'user_name', User.name, 
        'course_title', Course.title, 
        'member_role', Member.role 
    ) as js
    FROM User 
    JOIN Member JOIN Course 
        ON User.user_id = Member.user_id 
        AND Member.course_id = Course.course_id 
    ORDER BY 
        Course.title, 
        Member.role DESC, 
        User.name
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM