如何访问GET响应中包含的json数据

时间:2017-01-25 13:03:02

标签: javascript json node.js

继续昨天的传奇,现在我可以在回复中检索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。我需要对其进行字符串化吗?

0 个答案:

没有答案