如何引用匿名json数组?

时间:2014-12-08 16:35:09

标签: javascript json

我有一个从QuickBooks Online API返回的大型JSON对象。它是有效的JSON并显示在控制台上(记录后)。

检查控制台后,我看到以下内容:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

可以扩展为:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
0: Object
1: Object
2: Object
3: Object
4: Object
5: Object
6: Object
7: Object
8: Object
9: Object
10: Object
11: Object
12: Object
13: Object
14: Object
15: Object
16: Object
17: Object
18: Object
19: Object
20: Object
21: Object
22: Object
23: Object
24: Object
length: 25
__proto__: Array[0]

0: Object扩展为:

0: Object
*_data: Object
$$hashKey: "object:82"
__proto__: Object

*_data: Object扩展为:

Active: Array[1]
Balance: Array[1]
BalanceWithJobs: Array[1]
BillAddr: Array[1]
BillWithParent: Array[1]
DisplayName: Array[1]
FamilyName: Array[1]
Fax: Array[1]
FullyQualifiedName: Array[1]
GivenName: Array[1]
Id: Array[1]
Job: Array[1]
MetaData: Array[1]
Mobile: Array[1]
PreferredDeliveryMethod: Array[1]
PrimaryEmailAddr: Array[1]
PrimaryPhone: Array[1]
PrintOnCheckName: Array[1]
SalesTermRef: Array[1]
SyncToken: Array[1]
Taxable: Array[1]

我正在尝试访问名为DisplayName的属性。

用于console.log json数据的Angular代码:

$http.get('/customer').success(function(customers) {
    $scope.customers = customers;
    console.log($scope.customers[0]["*_data"].DisplayName[0]);
});

如何做到这一点?可以在控制台中输入某些内容来返回其值吗?

更新

我可以使用以下方式访问该对象:

console.log($scope.customers[0]);

但是,*_data是一个对象。我想的是:

然而,

console.log($scope.customers[0].*_data);会有效,我收到错误:

Uncaught SyntaxError: Unexpected token *

2 个答案:

答案 0 :(得分:5)

您是否将其登录到控制台?

假设你是,并且你有类似的东西:

console.log(data);

您可以访问以下数据:

data[0]["*_data"].DisplayName[0]

那是:

  1. 使用data[0]
  2. 取消引用第一个数组项
  3. 然后访问*_data属性。由于其名称不是有效的属性名称,因此您必须使用["string"]表单。
  4. DisplayName值是一个数组。使用[0]获取第一个值。

  5. 修改

    好的,哇,这实际上非常有趣!

    似乎响应数据包含一个奇怪的字符,这使得访问响应变得棘手。具体做法是:

    > Object.keys($scope.customers[0])[0]
    "*_data"
    > Object.keys($scope.customers[0])[0] == "*_data"
    false
    

    咦?为什么他们不相同?其中一个字符必须是unicode char,它看起来相同但具有不同的值!

    无论如何,解决这个问题很容易:

    var mysteriousKey = Object.keys($scope.customers[0])[0];
    var data = $scope.customers[0][mysteriousKey];
    

    这给了我:

      

    Object {Id:Array [1],SyncToken:Array [1],MetaData:Array [1],GivenName:Array [1],FamilyName:Array [1] ...}

    我认为你在追求的是什么。

答案 1 :(得分:1)

您的数组应该分配给变量。引用所需数组中项目的索引,并访问它的DisplayName属性(也是一个数组)。

var objArray; // this has your array of objects
objArray[0]["*_data"].DisplayName[0]; // should be the value you are looking for.