mysql数据需要写入json文件

Posted

技术标签:

【中文标题】mysql数据需要写入json文件【英文标题】:Mysql data need to be written to a json file 【发布时间】:2017-07-13 02:07:45 【问题描述】:

我正在尝试从 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 文件,以便我可以处理数据并应用一些逻辑。

【问题讨论】:

您可以使用fs 模块将其写入文件,而不是使用console.log。这有什么问题? mysql输出的json如何? :-o 当我在这个文件上运行 node 命令时。在控制台中,我以 json 格式获取数据。我需要将 json 数据放入 json 格式的文件中。我该怎么做? 我还是不明白mysql语句是如何生成json输出的。您可以分享示例运行的输出吗? 文件名为 main,js,我运行命令 node main.js 这是得到的结果。行是 RowDataPacket Name: 'AM1D**05', Region: 'Americas', 'Operating System': 'Linux', 'Host domain': 'r1', 'IP Address': '10.*.*. *',类:'Linux 服务器','生命周期状态':'已安装' 【参考方案1】:

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

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()https://developer.mozilla.org/en/docs/Web/javascript/Reference/Global_Objects/JSON/stringify

【讨论】:

这完全奏效了 Nehal。非常感谢朋友。我的错误是我没有对行进行字符串化。 嗨 Nehal,我正在尝试在我的 nodejs 代码中运行多行 mysql 语句,如下所示: var q = "select c.name as 'Name',"+ "cl.u_geographic_region as 'Region', "+ "CASE"+ "当 cic.os 像 '%Windows%' THEN 'Windows'"+ "当 cic.os 像 '%aix%' THEN 'AIX'"+ "当 cic.os 像 '%esx% ' THEN 'ESX'"+ "WHEN cic.os like '%linux%' THEN 'Linux'"+ "WHEN cic.os like '%solaris%' THEN 'Solaris'"+ "ELSE 'UNKNOWN'"+ "END as 'Operating System',"+ 在我的 Windows 环境中,借助反引号我能够实现它,但在 linux 中却无法实现 @RaghuReddy 如果您有一个新问题,请打开一个新问题。到目前为止,我对您问题的所有回答都已在 Linux 上进行了测试。 嗨 Nehal,我发布了这个新问题。 ***.com/questions/42514638/… 但是是的,我通过在每一行后添加 \n 以某种方式解决了它。

以上是关于mysql数据需要写入json文件的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs Parse Json 文件将输入转换为 JSON 数组写入文件

java如何创建Json文件?

js能把数据写入到json文件中吗

如何将数据框中的行数写入 JSON 文件?

Python 如何把json数据写入excel

节点 - 承诺后将 JSON 结果写入文件