将 json 对象转换为数组

Converting json object to an array

如何使用 lodash 或 javascript 转换以下内容:

 [
  {
    "roleId": "1",
    "name": "Superadmin"
    "permissions": [
      {
        "permissionId": "1",
        "action": "Remove"
      }
    ]
  },
  "id": "2",
  "name": "Administrator",
  "permissions": [
    {
      "permissionId": "1",
      "action": "Remove"
    },
    {
      "permissionId": "2",
      "action": "Create"
    },
    {
      "permissionId": "3",
      "action": "Read"
    }
  ]
]

为此:

{
   Superadmin: ['Remove'],
   Administrator: ['Remove', 'Create', 'Read']
}

提案 Array#forEach and Array#map

var array = [{ "roleId": "1", "name": "Superadmin", "permissions": [{ "permissionId": "1", "action": "Remove" }] }, { "id": "2", "name": "Administrator", "permissions": [{ "permissionId": "1", "action": "Remove" }, { "permissionId": "2", "action": "Create" }, { "permissionId": "3", "action": "Read" }] }],
    object = {};

array.forEach(function (a) {
    object[a.name] = a.permissions.map(function (b) {
        return b.action;
    });
});

document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

您可以使用 reduce & map

var temp =  [{
    "roleId": "1",
    "name": "Superadmin",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }]
 }, {
    "id": "2",
    "name": "Administrator",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }, {
        "permissionId": "2",
        "action": "Create"
    }, {
        "permissionId": "3",
        "action": "Read"
    }]
 }]

temp.reduce((result,obj)=>{
  result[obj.name] = obj.permissions.map(x=>x.action)
  return result;
},{});

从评论中看到格式化且有效的 json,这是您可以使用的东西。

var arr = [{
    "roleId": "1",
    "name": "Superadmin",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }]
}, {
    "id": "2",
    "name": "Administrator",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }, {
        "permissionId": "2",
        "action": "Create"
    }, {
        "permissionId": "3",
        "action": "Read"
    }]
}];

var newArray = arr.map(function(obj){ 
  var rObj = {};
  rObj[obj.name] = obj.permissions.map(function(childObj){
     return childObj.action;       
  });
  return rObj;
});

console.log(newArray);

https://jsfiddle.net/daze5a4c/1/

var json = [{
  "roleId": "1",
  "name": "Superadmin",
  "permissions": [{
    "permissionId": "1",
    "action": "Remove"
  }]
}, {
  "roleId": "2",
  "name": "Administrator",
  "permissions": [{
    "permissionId": "1",
    "action": "Remove"
  }, {
    "permissionId": "2",
    "action": "Create"
  }, {
    "permissionId": "3",
    "action": "Read"
  }]
}];

var roles = {};

json.forEach(function(obj) {
  var actions = [];
  obj.permissions.forEach(function(permission) {
    actions.push(permission.action);
  });
  roles[obj.name] = actions;
});

console.log(roles);

这正是您想要的。只需遍历 JSON 对象并获取将它们存储在另一个对象(角色)中所需的属性。

输出:

{
   Superadmin: ['Remove'],
   Administrator: ['Remove', 'Create', 'Read']
}