访问 JSON 中的元素 for nodejs



首先,我对node/JSON很陌生,所以在通读时请考虑这一点。

此代码的目的是从 SQL Server 数据库中获取数据,并能够访问它提取的元素。例如,它将提取数千个父帐户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:Usersza47387DesktopExcel Export Codetest2.js:31:48
    at _query (C:Usersza47387node_modulesmssqllibbase.js:1347:9)
    at Request.tds.Request.err [as userCallback] (C:Usersza47387node_modulesmssqllibtedious.js:671:15)
    at Request.callback (C:Usersza47387node_modulestediouslibrequest.js:37:27)
    at Connection.endOfMessageMarkerReceived (C:Usersza47387node_modulestediouslibconnection.js:2104:20)
    at Connection.dispatchEvent (C:Usersza47387node_modulestediouslibconnection.js:1084:36)
    at Parser.tokenStreamParser.on (C:Usersza47387node_modulestediouslibconnection.js:914:14)
    at Parser.emit (events.js:189:13)
    at Parser.parser.on.token (C:Usersza47387node_modulestediouslibtokentoken-stream-parser.js:27:14)
    at Parser.emit (events.js:189:13)

从您共享的示例来看,

记录集[0] 是未定义的,这意味着两个选项之一:

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

虽然我怀疑 a(,但控制台输出很好。请在尝试访问父帐户ID之前运行以下代码。

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

我也会将代码重构为:

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

这样错误就不会使 NodeJS 进程出现故障。

最新更新