MySql table into JSON format

戏子无情 提交于 2020-01-17 04:37:09

问题


I would like to convert like 100 tables from MySql to MongoDb
So I think that the easiest way will be to import the data as JSON
Any generic query to convert MySql data to JSON format without using PHP /ruby/Python?

SELECT CONCAT(CONCAT('{"CompanyId":', company_id),"}")  AS JSON FROM company;

回答1:


Try this:

SET @schema = 'test_db';
SET @table = 'test';

SELECT CONCAT(
  'SELECT CONCAT(TRIM(TRAILING ', QUOTE(','), ' FROM CONCAT(', QUOTE('{'), ',', 
  GROUP_CONCAT(QUOTE('"'), ',', QUOTE(COLUMN_NAME), ',', 
  QUOTE('"'), ',', QUOTE(':'), ',', QUOTE('"'), ',', COLUMN_NAME, ',', 
  QUOTE('"'),',', QUOTE(',')),
  ')), ''}'') FROM ', @table
)
INTO @qry FROM 
  (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c
  WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table) t;

SELECT @qry;
PREPARE stmt FROM @qry;
EXECUTE stmt;

Above query generates table data in JSON format. Using the query you can prepare a stored procedure taking database and table names as input parameters and populate your data. If you want to exclude some of the columns in a table, just modify the query which selects data from INFORMATION_SCHEMA database like SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table AND COLUMN_NAME NOT IN (**columns to exclude**).




回答2:


I extended oardic's answer to create a mysql procedure to generate json from table name along with null check. Here key is set to value null instead of empty string.

create procedure createJSON (IN tabelSchema varchar(255), IN tableName varchar(255), IN whereCondition varchar(255), OUT outJson longtext)
BEGIN
  DROP TEMPORARY TABLE IF EXISTS RowJson;
  SELECT CONCAT(
      'CREATE TEMPORARY TABLE RowJson AS SELECT CONCAT(TRIM(TRAILING ', QUOTE(','), ' FROM CONCAT(', QUOTE('{'), ',',
      GROUP_CONCAT(QUOTE('"'), ',', QUOTE(COLUMN_NAME), ',',
                   QUOTE('"'), ',', QUOTE(':'), ',', 'IF(ISNULL(', COLUMN_NAME, '), "null", CONCAT(',QUOTE('"'),",", COLUMN_NAME, ",", QUOTE('"'),')),',
                   QUOTE(',')),
      ')), ''}'') as json FROM ', tableName, ' WHERE ', whereCondition
  )
  INTO @qry FROM
    (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c
    WHERE TABLE_SCHEMA = tabelSchema AND TABLE_NAME = tableName) t;

  PREPARE stmt FROM @qry;
  EXECUTE stmt;

  SELECT json into outJson FROM RowJson;
END;


来源:https://stackoverflow.com/questions/25836710/mysql-table-into-json-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!