如何从json()对象访问键/值对?

时间:2017-07-28 21:43:48

标签: javascript angular typescript

我正在调用外部服务,我得到了这样的返回域对象:

var domainObject = responseObject.json();

这会将响应对象转换为js对象。然后,我可以轻松地访问此对象上的属性,如此

var users = domainObject.Users

用户是一组键/值对,如下所示:

1: "Bob Smith"
2: "Jane Doe"
3: "Bill Jones"

但是CDT将用户显示为对象类型,而用户[0]返回undefined。那么如何才能获得集合中第一个项目的句柄?我假设需要某种类型的类型转换,但不确定我应该怎么做呢

更新

以下是我可以访问这些值的一种方法:

//get first user key
Object.keys(responseObject.json().Users)[0]

//get first user value
Object.values(responseObject.json().Users)[0]

但是我需要通过ng2进行数据绑定,所以我希望有一个更简单的方法:

<div>
    <div *ngFor="let user of users">
        User Name: {{user.value}}
        <br>
    </div>
</div>

也许我应该在ng2组件中创建一个转换函数,在设置数据绑定变量之前将对象转换为我需要的内容?

3 个答案:

答案 0 :(得分:1)

这个怎么样:

let user= this.users.find(() => true)

这应该返回&#34;第一个&#34;之一。

答案 1 :(得分:1)

更新的答案

所以在浏览了几篇文档后,我发现了“新的”Object.entries() javascript函数。 You can read about it here。很酷。

无论如何,试一试。我很惭愧地说我没有时间去测试它,但它应该让你朝着正确的方向前进。

usersArray = []

// Turn Users object into array of [key, value] sub arrays.
userPairs = Object.entries(users);

// Add the users back into an array in the original order.
for (i=0; i < userPairs; i++) {
    usersArray.push(_.find(userPairs, function(userPair) { return userPair[0] == i }))
}

原始回答

我会使用underscore.jslodash来执行此操作。在处理数据结构和将代码保持在最低限度方面,两者都是非常有用的库。我个人会在lodash中使用_.values函数。 Read more about it here.。然后,您可以使用users[0]来检索第一个项目。

唯一需要注意的是,lodash不保证迭代序列与传入对象时的迭代序列相同。

users = _.values(users);
console.log(users[0]);

答案 2 :(得分:0)

如果您的初始对象只是一个普通对象,您如何知道它是如何排序的。属性成员未排序,即:循环顺序也不保证。我将用户名提取到一个数组中,然后用第二个单词对数组进行排序。这应该有用(只要姓氏是第二个单词,只有一个空格用作分隔符)。

var l=[];
for(var x in users) {
 push.l(users[x]);
}
var l1=l.sort ( (a,b) => return a.split(" ")[1]<b.split(" ")[1]);