我们正在使用node.js在Azure服务中创建一个Web服务,以从SQL db中检索数据。我们正在使用ClearDB来做同样的事情。
在检索数据时,它不会以正确的JSON格式提交。我们如何将结果sql对象转换为JSON字符串。
以下是我的代码。
app.get('/android', function(request, response) {
pool.getConnection(function(err, connection) {
if(err) { handleErrorResponse(err, response); return; }
var sql = "select projectname from taggedemployee where empname='test@hotmail.com' and tagflag='accepted'"
connection.query(sql, {}, function(err, results) {
connection.release(); // always put connection back in pool after last query
if(err) { handleErrorResponse(err, response); return; }
var proj = JSON.stringify(results);
console.log(proj);
console.log(proj[0].projectname);
for(var myKey in proj) {
console.log("key:"+ myKey+", value:"+proj[myKey]);
}
response.setHeader('Content-Type', 'application/json');
response.status(200).send(JSON.stringify(results) );
});
});
});
我无法操纵返回字符串为
的JSON字符串[{projectname: "Dominos"}]
我试过JSON.stringify
但没有运气。请帮我解决这个问题
答案 0 :(得分:3)
您实际上不需要JSON.stringify()
。 results
已经是你的javascript对象,它表示json对象的数组。只需使用
console.log(results[0].projectname);
答案 1 :(得分:3)
JavaScript对象或数组是JSON,您需要通过函数eval
或JSON.parse
将JSON字符串转换为JavaScript对象。请参阅http://www.json.org/js.html。
答案 2 :(得分:2)
来自SQL服务的响应是JSON - 如您所示。您需要使用JSON.parse()将JSON解析为对象。类似的东西:
app.get('/android', function(request, response) {
pool.getConnection(function(err, connection) {
if(err) { handleErrorResponse(err, response); return; }
var sql = "select projectname from taggedemployee where empname='test@hotmail.com' and tagflag='accepted'"
connection.query(sql, {}, function(err, results) {
connection.release(); // always put connection back in pool after last query
if(err) { handleErrorResponse(err, response); return; }
var proj = JSON.parse(response);
console.log(proj);
response.setHeader('Content-Type', 'application/json');
response.status(200).send(results);
});
});
});
JSON.stringify用于将对象转换为JSON字符串。 JSON.parse用于将JSON字符串转换为对象。
答案 3 :(得分:0)
我构建了一个将查询转换为JSON的函数,其工作情况非常好:
我使用多个表中的Date列,它必须是字符串(对我来说很好),因此这些列将必须被调用/包含“ Date”,其他数据列将是float .2f格式。 / p>
def conv_func(data, columns):
gen_dict={}
for j, row in enumerate(data):
dict = {}
for col in columns:
dict[col] = ''
for i, val in enumerate(dict.keys()):
if 'Date' in val:
dict[val]=str(row[i])
else:
try:
dict[val] = round((row[i]),2)
except:
dict[val]=(row[i])
gen_dict[j] = dict
return list(gen_dict.values())
并对查询本身使用相同的列列表:
def get_tools():
cur = set_connection()
columns=['Col1','Col2','Col3']
columnsQuery=','.join(columns)
cur.execute(f"SELECT {columnsQuery} FROM [MyTable] ORDER BY [Col1] DESC")
data = cur.fetchall()
return {'success': True, 'data': conv_func(data,columns)}