继续昨天的传奇,现在我可以在回复中检索json对象,但我无法从中提取数据。
以下node.js代码段来自文件" accounts.js"它位于路径/ lib中的ETrade api库中。它返回包含有关经过身份验证的用户的帐户的数据的json。身份验证部分工作得很好。
exports.listAccounts = function(successCallback,errorCallback)
{
var actionDescriptor = {
method : "GET",
module : "accounts",
action : "accountlist",
useJSON: true,
};
this._run(actionDescriptor,{},successCallback,errorCallback);
};

ETrade网站称此调用将产生以下样本回复:
{
"AccountListResponse": {
"Account": [
{
"accountDesc": "MyAccount-1",
"accountId": "83405188",
"marginLevel": "MARGIN",
"netAccountValue": "9999871.82",
"registrationType": "INDIVIDUAL"
},
{
"accountDesc": "MyAccount-3",
"accountId": "83405553",
"marginLevel": "CASH",
"netAccountValue": "100105468.99",
"registrationType": "INDIVIDUAL"
},
{
"accountDesc": "SIMPLE IRA",
"accountId": "83405188",
"marginLevel": "CASH",
"netAccountValue": "99794.13",
"registrationType": "IRA"
}
]
}
}

在我的app.js文件中,我有以下内容:
var etrade = require('./lib/etrade');
var et = new etrade(configuration);
et.listAccounts(
function(res){
var listAccountsRes = res;
console.log('account list success!');
console.log(listAccountsRes)
},
function(error) {
console.log("Error encountered while attempting " +
"to retrieve account list: " +
error);
});

运行此代码时,控制台日志显示以下消息:
{ 'json.accountListResponse':
{ response:
[ [Object],
[ [Object],
[ [Object],
[ [Object],
[ [Object],
[ [Object],
[ [Object],
[ [Object] ] } }

假设在app.js中我想将帐户数据放在名为myAccounts的变量中。
我们的一位成员杰克解决了昨天的问题,当我评论说我仍然无法访问回复中的数据时,他建议:"该属性有一个点因此,您必须使用[...]而不是点符号来访问它。使用[' json.accountListResponse']。响应来查看对象内部的内容。"到目前为止,即使我像这样使用['json.accountListResponse'].res
,我也无法实现这一点:
var listAccountsRes = [json.accountListResponse].res;
打印到控制台时返回undefined。
感谢亚当的建议,这导致了这个有效:
var listAccountsRes = res['json.accountListResponse'];
var listAccounts = listAccountsRes['response'];
console.log('account list success!');
console.log(listAccounts)

现在,控制台日志几乎完全报告了ETrade所说的内容。 (他们似乎更改了名称"帐户"到"响应")。我假设我的变量listAccounts现在包含json,其中包含八个示例帐户,我可以在控制台日志中看到。但我仍然不知道如何访问个别元素。应该有一些简单的代码将遍历json文件并生成一个我可以实际用于某些事情的数组数组。我尝试像数组一样访问它:console.log(listAccounts [0])但返回undefined。我需要对其进行字符串化吗?