Mysql数据需要写入json文件

Mysql数据需要写入json文件,mysql,json,node.js,Mysql,Json,Node.js,我试图从mysql数据库中读取数据并将其写入JSON文件。我是node.js的新手,非常感谢您的帮助 我写的代码是: var mysql = require('mysql'); var fs = require('fs'); var configFile = process.cwd() + "\\config.json"; var configFileContents = fs.readFileSync(configFile, 'utf8'); var config = JSON.pa

我试图从mysql数据库中读取数据并将其写入JSON文件。我是node.js的新手,非常感谢您的帮助

我写的代码是:

var mysql      = require('mysql');
var fs = require('fs');
var configFile = process.cwd() + "\\config.json";
var configFileContents = fs.readFileSync(configFile, 'utf8');
var config = JSON.parse(configFileContents);
//config = config[process.env.BLENV];
console.log(config.PROD.HTTP);

var connection = mysql.createConnection({
  host     : config.QA.SQLHostName,
  user     : config.QA.SQLUserName,
  password : config.QA.SQLPassword,
  database : config.QA.SQLDatabase,
  multipleStatements: true
});

connection.connect();

var timeInMs = Date.now();
console.log(timeInMs);

connection.query(` 
select 
c.name as "Name",
cl.u_geographic_region as "Region",
CASE
    WHEN cic.os like '%Windows%' THEN 'Windows'
    WHEN cic.os like '%aix%' THEN 'AIX'
    WHEN cic.os like '%esx%' THEN 'ESX'
    WHEN cic.os like '%linux%' THEN 'Linux'
    WHEN cic.os like '%solaris%' THEN 'Solaris'
        ELSE 'UNKNOWN'
    END as "Operating System",

ci.dns_domain as "Host domain",
ci.ip_address as "IP Address",
CASE
    WHEN c.sys_class_name = 'cmdb_ci_computer' THEN 'Computer'
    WHEN c.sys_class_name = 'cmdb_ci_win_server' THEN 'Windows Server'
    WHEN c.sys_class_name = 'cmdb_ci_esx_server' THEN 'ESX Server'
    WHEN c.sys_class_name = 'cmdb_ci_aix_server' THEN 'AIX Server'
    WHEN c.sys_class_name = 'cmdb_ci_lb' THEN 'Load Balancer'
    WHEN c.sys_class_name = 'cmdb_ci_lb_ace' THEN 'lb_ace'
    WHEN c.sys_class_name = 'cmdb_ci_aix_lb_bigip' THEN 'lb_bigip'
    WHEN c.sys_class_name = 'cmdb_ci_linux_server' THEN 'Linux Server'
    WHEN c.sys_class_name = 'cmdb_ci_mainframe' THEN 'IBM Mainframe'
    WHEN c.sys_class_name = 'cmdb_ci_solaris_server' THEN 'Solaris Server'
    WHEN c.sys_class_name = 'cmdb_u_ci_ibmi_server' THEN 'IBMi Server'
    WHEN c.sys_class_name = 'cmdb_ u_ci_ibmi_server' THEN 'IBMi Server'
    WHEN c.sys_class_name = 'cmdb_u_server_appliance' THEN 'ServerAppliance'
        ELSE 'Unknown'
    END as "Class",

CASE 
    WHEN c.install_status = '1' THEN 'Installed'
    WHEN c.install_status = '100' THEN 'Absent'
    WHEN c.install_status = '2' THEN 'On Order'
    WHEN c.install_status = '3' THEN 'In Maintenance'
    WHEN c.install_status = '4' THEN 'Pending Install'
    WHEN c.install_status = '5' THEN 'Pending Repair'
    WHEN c.install_status = '6' THEN 'In Stock'
    WHEN c.install_status = '7' THEN 'Retired'
    WHEN c.install_status = '8' THEN 'Stolen'
    WHEN c.install_status = '9' THEN 'In Use'
                         ELSE 'Unknown'
          END As "lifecycle Status"

from
cmdb as c
join cmdb_ci ci on c.sys_id = ci.sys_id
join cmdb_ci_hardware as cih on c.sys_id = cih.sys_id
join cmdb_ci_computer cic on c.sys_id = cic.sys_id
join cmn_location as cl on cl.sys_id = c.location
where c.name is not null
`, function(err, rows, fields) {
  if (err) throw err;

 for (var i in rows) {
  console.log('the rows are', rows[i]);
}
});

connection.end();

现在,当我使用“node filename.js”运行代码时,我能够将输出打印到我的控制台。但是我希望它被写入一个json文件,这样我就可以处理数据并应用一些逻辑

如果您只想将JSON格式的MySQL数据的输出写入一个文件,请替换

for (var i in rows) {
 console.log('the rows are', rows[i]);
}
…与:

fs.writeFile("/path/to/file.json", JSON.stringify(rows), function(err) {
    if (err) return console.log(err);    
    console.log("The file was saved!");
});

关于
JSON.stringify()
at

的更多信息,您可以使用
fs
模块将其写入文件,而不是使用
console.log
。这有什么问题?mysql如何输出json-当我在这个文件上运行node命令时。在控制台中,我以json格式获取数据。我需要将json数据转换成json格式的文件。我怎么能做到呢?我仍然不明白mysql语句是如何生成json输出的。你能分享一个示例运行的输出吗?文件名是main,js,我正在运行命令节点main.js这是我得到的结果。这些行是RowDataPacket{Name:'AM1D**05',Region:'Americas','Operating System':'Linux','Host domain':'r1','IP Address':'10.*.',Class:'Linux Server','lifecycle Status':'Installed'},这些行完全正常工作。非常感谢,伙计。我的错误是我没有对行进行字符串化。嗨,Nehal,我试图在我的nodejs代码中运行多行mysql语句,如下所示:var q=“选择c.name作为‘name’,“+”cl.u_geographic_region作为‘region’,“+”CASE“+”当cic.os像“%Windows%”时,然后是“Windows”+”当cic.os像“%aix%”时,然后是“aix”+”“当cic.os(如“%esx%”时,则为“esx”)+“当cic.os(如“%linux%”时,则为“linux”)+“当cic.os(如“%solaris%”时,则为“solaris”)+“否则为“未知”+”以“操作系统”结尾,“+在我的windows环境中,在back ticks的帮助下,我能够实现它,但在linux中我无法实现toget@RaghuReddy如果你有新问题,请提出新问题。到目前为止,我对你们问题的所有答案都已经在Linux上测试过了。嘿,内哈尔,我发布了这个新问题。但是,是的,我通过在每行后面添加\n来解决它。