使用 node.js 将 JSON 写入 mysql 数据库
Write JSON to mysql database with node.js
我正在尝试使用 node.js 将 JSON 对象(或字符串,不确定)写入我的 mysql 数据库。我首先使用 xml2js 通过 xml url 检索了 JSON。我可以通过 JSON.stringify 在我的控制台中记录 json 字符串结果,但我不确定如何从这里继续。
这是 url 我从 https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=deld1&output=xml
中提取的 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();
});
});
如前所述,当我在我的控制台中 运行 上面的代码时,控制台 returns 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"}}]}]}]}};
谢谢。
听起来您拥有想要的 JSON,但不确定如何访问其中的数据。如果我错了,请纠正我。
假设您有一个名为 "test" 的 JSON 对象:
{
a:1
b:{
x:2
}
}
可以通过调用test.a访问1的值,同样通过调用test.b.x
访问2的值
这对我有用。发现你要找的主要数据是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");
});
});
});
我正在尝试使用 node.js 将 JSON 对象(或字符串,不确定)写入我的 mysql 数据库。我首先使用 xml2js 通过 xml url 检索了 JSON。我可以通过 JSON.stringify 在我的控制台中记录 json 字符串结果,但我不确定如何从这里继续。
这是 url 我从 https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=deld1&output=xml
中提取的 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();
});
});
如前所述,当我在我的控制台中 运行 上面的代码时,控制台 returns 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"}}]}]}]}};
谢谢。
听起来您拥有想要的 JSON,但不确定如何访问其中的数据。如果我错了,请纠正我。
假设您有一个名为 "test" 的 JSON 对象:
{
a:1
b:{
x:2
}
}
可以通过调用test.a访问1的值,同样通过调用test.b.x
访问2的值这对我有用。发现你要找的主要数据是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");
});
});
});