我如何从 JSON 数组中获取值?

How can i take Values from a JSON array?

如何从数组 friends 中获取“steamid”?
我做错了什么?
friendslistfriends 让我很困惑。

var obj = 
{
 "friendslist": {
  "friends": [
   {
    "steamid": "76561197965254644",
    "relationship": "friend",
    "friend_since": 1427418915
   },
   {
    "steamid": "76561197967483523",
    "relationship": "friend",
    "friend_since": 1483547216
   },
   {
    "steamid": "76561197967658405",
    "relationship": "friend",
    "friend_since": 1431204923
   }
      ]
 }
}
for (var i = 0; i < obj.length; i++) {
  console.log(obj[i].friends['steamid']);
   
}

 var obj = 
    {
     "friendslist": {
      "friends": [
       {
        "steamid": "76561197965254644",
        "relationship": "friend",
        "friend_since": 1427418915
       },
       {
        "steamid": "76561197967483523",
        "relationship": "friend",
        "friend_since": 1483547216
       },
       {
        "steamid": "76561197967658405",
        "relationship": "friend",
        "friend_since": 1431204923
       }
          ]
     }
    }
    obj.friendslist.friends.forEach((i) => {
      console.log(i.steamid);
    })

obj.friendslist.friends returns 数组然后可以循环。数组中的每个值都是一个对象,您需要的 属性 是 steamid。

获取好友列表对象,然后获取好友 array/list 并对其进行迭代。 对于其中的每个对象,打印 steamid 或对象中的任何内容。

 for (var i = 0; i < obj.friendslist.friends.length ; i++) {
      console.log(obj.friendslist.friends[i].steamid );
 }

您需要先访问嵌套的 friends 属性,然后遍历它。

var friends = obj.friendslist.friends;

for (var i = 0; i < friends.length; i++) {
   console.log(friends[i]['steamid']);
}

正如您在评论中要求对我的回答做出解释...

您有一个 JSON object,其中包含某些可能是另一个 object 的属性,一个 String/Number/DateArray。因此,要访问 object 中的 属性,您必须首先按以下方式通过其名称直接访问其 child。

obj.friendslist

obj["friendslist"]

您在 friendslist 中还有另一个 child,因此您必须通过以下方式访问它:

obj.friendslist.friends

现在您的 friends 属性 包含一个数组,您可以使用 for loop

遍历它
for (var i = 0; i < obj.friendslist.friends.length; i++) {
  console.log(obj.friendslist.friends[i]['steamid']);

}

使用 Array map() 方法迭代对象数组以获取特定键值。

map() 方法使用对该数组中每个元素调用提供的函数的结果创建一个新数组。

工作演示:

var obj = 
{
 "friendslist": {
  "friends": [
   {
    "steamid": "76561197965254644",
    "relationship": "friend",
    "friend_since": 1427418915
   },
   {
    "steamid": "76561197967483523",
    "relationship": "friend",
    "friend_since": 1483547216
   },
   {
    "steamid": "76561197967658405",
    "relationship": "friend",
    "friend_since": 1431204923
   }
      ]
 }
};

var newObj = obj.friendslist.friends.map(function(item) {
    return item.steamid;
});

console.log(newObj);

你有一个 Object,还有一个 friendslist 属性。 那 属性 也是一个 Object 只有一个 属性, friends.
friendsObjectArray
这些对象有您感兴趣的属性 steamid

但是,您的代码尝试直接迭代 obj,而不是 friendslist 属性。这项工作是因为访问 属性 可以像访问数组元素一样完成:

obj.property === obj['property']

所以您正在尝试访问 obj 的 属性 0。如您所见,它不存在,并且 return undefined.

你想要的是迭代 friendslist 属性:

for (var i = 0; i < obj.length; i++) {
    console.log(
        obj. //The base object
        friendslist. //The friendslist property
        friends[i]. //The friends property, iterated
        steamid //Get the steamid
    );
}

备选方案可以使用 obj.friendslist.friendsArray 的通用 mapforEach 方法,也可以写成 obj['friendslist']['friends'].

您可能想阅读 javascript 中 ArrayObject 之间的相似之处,以及它们各自的方法。 MDN 是一个很好的地方,但任何文档都应该足够了。