代码之家  ›  专栏  ›  技术社区  ›  yer

如何以数组形式访问JSON响应中的嵌套值

  •  -3
  • yer  · 技术社区  · 7 年前

    使用 const token = response.json().token; 我能够获得以下JSON:

    {
        "token": "*********",
        "roles": [
            {
                "id": 4,
                "name": "User",
                "pivot": {
                    "user_id": 1,
                    "role_id": 4
                }
            }
        ]
    }
    

    我希望能够以数组的形式访问角色中的名称。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ketzak    7 年前

    如果您只想访问角色数组,假设您使用的是传统的响应对象,那么您可以按照其他用户所述的方式访问它:

    var roles = response.json().roles
    

    当我重新阅读问题和评论时,我的想法是,用户希望访问角色As列表中的名称。假设是这样,map函数可以很好地实现这一点:

    // Assuming we store response in "data"
    var data = response.json();
    var names = data.roles.map(function(role){return role.name});
    console.log(names);
    // Then "names" will look like ["User",...]
    

    简而言之,map将遍历它所调用的数组,并对其运行提供的函数,第一个参数是它在数组中看到的当前值。可以如上所述动态定义此函数,如果逻辑复杂或重复使用,则可以预定义并传递此函数。

    这是Map及其同级Reduce的常见用法。这两种方法通常用于将复杂的可变长度数据提取为更简单的形式。

    地图记录: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

    更新时间: 原来的问题似乎是关于ES6的,所以这里有一个“适当的”ES6版本,带有适当的声明和箭头函数:

    // Assuming we store response in "data"
    const data = response.json();
    const names = data.roles.map(role => role.name);
    console.log(names);
    // Then "names" will look like ["User",...]