1

我正在尝试使用驱动程序通过节点从 sql server 2008 获取数据。不知何故,我可以成功获取数据。我的问题是如何以 Json 格式显示它。

我的代码是这样的:

execSql("select * from tblStudent", function (err,rows) {

        console.log("City_StrCode:"  + rows[0].value);
        console.log("State_StrCode:"  + rows[1].value);
        console.log("City_StrName:" + rows[2].value);


});

现在我查询数据库后的结果是这样的:

City_StrCode:0005
State_StrCode:ORS
City_StrName:Ratnagiri12
City_StrCode:1002
State_StrCode:78899
City_StrName:thousandtwo
City_StrCode:1010
State_StrCode:1001
City_StrName:U FOOL34
Status:true
City_StrCode:105
State_StrCode:001
City_StrName:dgrt12
City_StrCode:1789
State_StrCode:001
City_StrName:XZAS12

给我一些建议...

4

2 回答 2

4

JSON stringify有一个用于美化和缩进的 arg。这将打印并缩进每个 2 级空格。

console.log(JSON.stringify(myObject, null, 2);

所以这:

var obj = ['one', 'two', {a:1, b:2}];
console.log(JSON.stringify(obj, null, 2));

输出:

[
  "one",
  "two",
  {
    "a": 1,
    "b": 2
  }
]

如果原始对象包含的数据比您想要的多,或者您希望有选择性,或者您希望控制要输出的 JSON obj 的构建方式,那么您可以将数据复制到一个新对象中,然后将其打印出来。另请注意,您的 SQL 结果集是平坦的,因此在循环时进行修改允许您将其构建到对象中。就像是 ...

execSql("select * from tblStudent", function (err,rows) {
    for (i=0; i<rows.length; i++) {
        var output;
        var fieldNum = i % 3;

        switch (fieldNum){
           case 0:
               output = {};
               output.cityCode = rows[i].value;
               break;
           case 1:
               output.stateCode = rows[i].value;
               break;
           case 2:
               output.stateName = rows[i].value;
               console.log(output, null, 2);
               break;
        }
    }


});
于 2013-06-19T11:48:32.443 回答
2

如果您想将每一行作为单个对象注销,请这样做

execSql("select * from tblStudent", function (err,rows) {

    rows.forEach(function (row) {
       console.log(row);
    });

});

或像bryanmac建议的那样格式化:

execSql("select * from tblStudent", function (err,rows) {

    rows.forEach(function (row) {
       console.log(JSON.stringify(row, null, 2));
    });

});
于 2013-06-19T11:56:39.243 回答