这个问题涉及将SQL查询结果转换为JSON的最佳方法的设计。现在,我循环遍历一个查询(用户)的结果,并对每个用户的教育和使用进行单独查询,以作为可变长度的JSON数组附加(下面的选项2)。我不确定我正在做的方式是否是适当的解决方案,或者是否首选解析连接表。这是我的问题:
选项1:我可以使用连接并获得类似的内容:
user | employment | position | education | degree
john | BCG | consultant | harvard | MBA
john | BCG | consultant | ut Austin | bs
john | White house | speechwriter | harvard | MBA
john | White house | speechwriter | ut Austin | bs
john | Papa Johns | delivery boy | harvard | MBA
john | Papa Johns | delivery boy | ut Austin | bs
rob | google | engineer | ut Austin | bs
rob | dropbox | engineer | ut Austin | bs
选项2:我可以选择对用户进行查询,例如:
user
john
rob
然后可以在Java中循环遍历这些用户,然后对每个用户进行查询,即对于john我会得到:
employment | postion
BCG | consultant
whitehouse | speechwriter
papa johns | delivery boy
.... and a similar one for education.
第二个选项似乎可以更容易地将其转换为json,但我还必须为每个用户进行多次SQL查询,每次都打开一个连接。对于第一个选项,我不太确定如何将其转换为json,但它应该是可行的。
如果有人能告诉我哪种方法是最佳做法,我真的很感激。谢谢!
答案 0 :(得分:0)
是否可以使用Node.js?
您可以通过Node脚本查询Mysql。查询的结果将是一个JavaScript对象,您可以在JSON文件中轻松转换并保存到磁盘。
<强>必需强>
npm install mysql
节点脚本(未经测试!)
var mysql = require('mysql'), //mysql connector
fs = require('fs'), //file system
data = [];
//connect to MySQL
var connection = mysql.createConnection(
{
host : 'localhost',
user : 'your-username',
password : 'your-password',
database : 'db-name',
}
);
connection.connect();
var queryString = 'SELECT * FROM myTable';
//query MySQL
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
//save result to local variable
data = rows;
});
connection.end();
var outputFilename = '/tmp/my.json',
jsonString = JSON.stringify(data, null, 2); //extra params for pretty printing
//save json to file
fs.writeFile(outputFilename, jsonString, function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to " + outputFilename);
}
});
如果查询太大,可以修改代码以将行追加到文件(而不是writeFile),并首先查询查询总数,然后读取行的行并重复直到查询中的总od行< / p>