使用 node.js 将 JSON 写入 mysql 数据库
Posted
技术标签:
【中文标题】使用 node.js 将 JSON 写入 mysql 数据库【英文标题】:Write JSON to mysql database with node.js 【发布时间】:2019-07-14 21:11:36 【问题描述】:我正在尝试使用 node.js 将 JSON 对象(或字符串,不确定)写入我的 mysql 数据库。我首先使用 xml2js 通过 xml url 检索 JSON。我可以通过 JSON.stringify 在我的控制台中记录 json 字符串结果,但我不确定如何从这里开始。
这是我从中获取 xml 的网址:https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=deld1&output=xml
我想将 JSON 字符串中的每个实例写入一行,并将列作为数据的名称。它看起来像这样:
这是我在 index.js 中的代码,我在控制台上使用节点 index.js 执行:
var parseString = require('xml2js').parseString;
var http = require('http');
var https = require('https');
var mysql = require('mysql');
var con = mysql.createConnection(
host: "localhost",
user: "root",
password: "password",
database: "mydb"
);
function xmlToJson(url, callback)
var req = https.get(url, function(res)
var xml = '';
res.on('data', function(chunk)
xml += chunk;
);
res.on('error', function(e)
callback(e, null);
);
res.on('timeout', function(e)
callback(e, null);
);
res.on('end', function()
parseString(xml, function(err, result)
callback(null, result);
);
);
);
var url = "https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=deld1&output=xml"
xmlToJson(url, function(err, data)
if (err)
return console.err(err);
strungout = JSON.stringify(data, null, 1);
console.log(strungout);
//strungout contains my json string
)
con.connect(function(err)
if (err) throw err;
//below is where I might make an insert statement to insert my values into a mysql table
var sql = someinsertstatement
con.query(sql, function (err, result)
if (err) throw err;
console.log("records inserted");
res.end();
);
);
如前所述,当我在控制台中运行上述代码时,控制台返回 JSON,但我不确定如何将其分配给一个变量,然后我可以将其写入我的 mysql 数据库。
或者,如果有一种更简单的方法可以将网站中的 xml 直接写入我的 mysql 数据库,我当然会很感激任何指针。我觉得它应该比这更容易,但我几乎是新手。
编辑: 添加 JSON。我删除了换行符以巩固它。试图将结果“4.68”分配给一个变量。
data = "site": "observed": ["datum": ["valid": ["_": "2019-02-21T19:42:00-00:00","$": "timezone": "UTC"],"primary": ["_": "4.68","$": "name": "Stage","units": "ft"]]];
谢谢。
【问题讨论】:
【参考方案1】:这对我有用。发现你找的主要数据是site.observed.datum
const parser = require('xml2json');
const request = require("request");
var mysql = require('mysql');
var con = mysql.createConnection(
host: "localhost",
user: "root",
password: "password",
database: "mydb"
);
var api_url = 'https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=deld1&output=xml';
function xmlToJson(url, callback)
return request(
method: 'GET',
url: api_url,
, function (error, response, body)
if (error)
return callback(
errorResponse: error,
rowsToInsert: false
);
else
let jsonRes = JSON.parse(parser.toJson(body));
let datumResult = jsonRes.site.observed.datum;//I had to log Object.keys multple time to get the
const readyForDB = datumResult.map(x =>
let timeOfReading = x.valid.$t;
let stage = x.primary.$t;
let flow = x.secondary.$t;
return [
timeOfReading, stage, flow
]
);
return callback(
errorResponse: false,
rowsToInsert: readyForDB
);
)
return xmlToJson(api_url, (errorResponse, rowsToInsert) =>
if(errorResponse)
throw callback.errorResponse;
return con.connect(function(err)
if (err) throw err;
//below is where I might make an insert statement to insert my values into a mysql table
var sql = "INSERT INTO forecast (timeOfReading, stage, flow) VALUES ?"
con.query(sql, [rowsToInsert], function (err, result)
if (err) throw err;
console.log(result.affectedRows + " rows inserted");
);
);
);
【讨论】:
这工作完美无缺,非常感谢!现在我只需要知道如何为一大堆 xml 链接循环,并将每个链接的最新读数添加到数据库中......但我会先处理一段时间。【参考方案2】:听起来您拥有所需的 JSON,但不确定如何访问其中的数据。如果我错了,请纠正我。
假设您有一个名为“test”的 JSON 对象:
a:1
b:
x:2
你可以通过调用test.a访问1的值,同样通过调用test.b.x访问2的值
【讨论】:
是的,我相信这将是解决这个问题的第一步。然后我需要在分配给变量后将其添加到 mysql 数据库中。知道如何编写 mysql insert 语句吗? 好吧,在涉及到 lodash 的兔子洞之后,我仍然无法弄清楚如何从 JSON 中检索任何值。似乎 JSON 数据嵌套在 7ish 数组中,我不断收到错误消息。我在上面添加了 JSON 信息。我正在尝试将“4.68”和“Stage”结果提取到变量中,但不知道如何。以上是关于使用 node.js 将 JSON 写入 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章