访问JSON中用于Node.js的元素

时间:2019-04-14 03:38:58

标签: sql node.js json parsing

首先,我是node / JSON的新手,因此在阅读时请考虑到这一点。

此代码的目的是从SQL Server数据库中获取数据,并能够访问它提取的元素。例如,它将提取数千个parentaccID ID,而我只想访问其中之一。

我已经浏览了整整一天的论坛,试图从我的nodejs函数访问JSON元素,并且每次尝试访问这些元素之一时,都会遇到“未定义”错误。作为最后的手段,我在这里。

我已经检查过几次,以查看记录集已被解析,并且看来它已被解析。

下面是我的代码,并且一个非常小的JSON代码示例即将结束。

我已经注释了我出错的地方。

function getEmp() {
    var conn = new sql.ConnectionPool(dbConfig);
    var req = new sql.Request(conn);

    conn.connect(function (err) {
        if (err) {
            console.log(err);
            return;
        }
        req.query("SELECT * FROM parentaccount Where accountname like 'Titan%' FOR JSON PATH", function (err, recordset) {
            if (err) {
                console.log(err);
            }
            else {
                const Test1 = recordset[0].ParentAccountId; //error here
                console.log(Test1);
            }
            conn.close();
        })
    })
}

getEmp();





//EXAMPLE JSON
{ recordsets: [ [ [Object] ] ],
recordset:   
[ { 'JSON_F52E2B61-18A1-11d1-B105-00805F49916B':
'[{"ParentAccountId":4241411,"AccountName":"Titan"} ],
output: {},
rowsAffected: [ 3 ] }



ERROR:
TypeError: Cannot read property 'ParentAccountId' of undefined
    at C:\Users\za47387\Desktop\Excel Export Code\test2.js:31:48
    at _query (C:\Users\za47387\node_modules\mssql\lib\base.js:1347:9)
    at Request.tds.Request.err [as userCallback] (C:\Users\za47387\node_modules\mssql\lib\tedious.js:671:15)
    at Request.callback (C:\Users\za47387\node_modules\tedious\lib\request.js:37:27)
    at Connection.endOfMessageMarkerReceived (C:\Users\za47387\node_modules\tedious\lib\connection.js:2104:20)
    at Connection.dispatchEvent (C:\Users\za47387\node_modules\tedious\lib\connection.js:1084:36)
    at Parser.tokenStreamParser.on (C:\Users\za47387\node_modules\tedious\lib\connection.js:914:14)
    at Parser.emit (events.js:189:13)
    at Parser.parser.on.token (C:\Users\za47387\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
    at Parser.emit (events.js:189:13)

1 个答案:

答案 0 :(得分:0)

根据您分享的样本,

recordset [0]未定义,表示两个选项之一:

a)查询结果未获取任何行。 b)查询结果的格式与预期的格式不同。

尽管我怀疑a),但它可以很好地控制输出。在尝试访问ParentAccountId之前,请先运行以下代码。

console.log('output : ', JSON.stringify(recordset, null, 4));

我也将代码重构为:

const Test1 = (Array.isArray(recordset) && 
recordset.length) ? recordset[0].ParentAccountId : null;

以便该错误不会使nodejs进程崩溃。