我有一个从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 *
。
答案 0 :(得分:5)
您是否将其登录到控制台?
假设你是,并且你有类似的东西:
console.log(data);
您可以访问以下数据:
data[0]["*_data"].DisplayName[0]
那是:
data[0]
*_data
属性。由于其名称不是有效的属性名称,因此您必须使用["string"]
表单。DisplayName
值是一个数组。使用[0]
获取第一个值。好的,哇,这实际上非常有趣!
似乎响应数据包含一个奇怪的字符,这使得访问响应变得棘手。具体做法是:
> 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.