在Node.js中将SQL对象转换为有效的Json字符串 - Azure

3
我们正在使用node.js在Azure服务中创建一个web服务,以从SQL数据库中检索数据。我们使用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,但不成功。请帮我解决这个问题。

4个回答

4
你其实不需要使用 JSON.stringify()results 已经是你的 JavaScript 对象,它代表了一个 JSON 对象数组。只需使用
console.log(results[0].projectname);

3
JavaScript中的对象或数组是JSON格式,如果需要将JSON字符串转换为JavaScript对象,可以使用函数evalJSON.parse。具体操作请参考http://www.json.org/js.html

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 字符串转换成对象。


0
我编写了一个将查询转换为JSON的函数,它非常有效:
我使用多个表中的日期列,需要将其作为字符串(这对我来说没问题),因此这些列将需要被命名为/包含“Date”,其他数据列将是浮点数.2f格式。
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)}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接