分组并合并 JSON 属性
Group and merge JSON properties
我有一个 JSON 对象,它具有如下重复的电子邮件属性:
accounts": [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]
JSON 包含我要作为分组依据的重复电子邮件字段。期望的结果 JSON 如下:
{
“email” : ”somebody@domain.com”,
“accountID” : 1,
“accountName” : “Account Name”,
“permissions” : [
{
“permission” : “Permission 1”,
“nodeID” : 1
},
{
“permission” : “Permission 2”,
“nodeID” : 2
}
]
}
因此,通过这种方式生成的 JSON 将不会包含超过 1 个具有相同电子邮件属性的项目。
有什么方法可以用 jQuery 实现吗?
提前致谢。
这可以通过 forEach
循环很容易地完成:
var source = {accounts: [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]};
var groups = {};
source.accounts.forEach(function(item) {
if (!groups.hasOwnProperty(item.email)) {
groups[item.email] = {
email : item.email,
accountID : item.accountID,
accountName: item.accountName,
permissions: []
};
}
groups[item.email].permissions.push({
permission: item.permission,
nodeID: item.nodeID
});
});
alert(JSON.stringify(groups));
我们创建一个空对象,然后遍历您的原始数组。对于数组中的每个项目,我们检查我们是否已经有这封电子邮件,如果没有,我们将它与 accountID
和 accountName
一起插入到对象中,并为权限创建一个空数组。然后我们只需将权限添加到数组即可。
你最终会得到一个看起来像这样的对象:
{
"somebody@domain.com": {
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permissions": [
{
"permission": "Permission 1",
"nodeID": 1
},
{
"permission": "Permission 2",
"nodeID": 2
}
]
}
}
每个电子邮件地址都有一个密钥。如果需要,您可以使用 for...in
循环遍历它。
我有一个 JSON 对象,它具有如下重复的电子邮件属性:
accounts": [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]
JSON 包含我要作为分组依据的重复电子邮件字段。期望的结果 JSON 如下:
{
“email” : ”somebody@domain.com”,
“accountID” : 1,
“accountName” : “Account Name”,
“permissions” : [
{
“permission” : “Permission 1”,
“nodeID” : 1
},
{
“permission” : “Permission 2”,
“nodeID” : 2
}
]
}
因此,通过这种方式生成的 JSON 将不会包含超过 1 个具有相同电子邮件属性的项目。
有什么方法可以用 jQuery 实现吗?
提前致谢。
这可以通过 forEach
循环很容易地完成:
var source = {accounts: [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]};
var groups = {};
source.accounts.forEach(function(item) {
if (!groups.hasOwnProperty(item.email)) {
groups[item.email] = {
email : item.email,
accountID : item.accountID,
accountName: item.accountName,
permissions: []
};
}
groups[item.email].permissions.push({
permission: item.permission,
nodeID: item.nodeID
});
});
alert(JSON.stringify(groups));
我们创建一个空对象,然后遍历您的原始数组。对于数组中的每个项目,我们检查我们是否已经有这封电子邮件,如果没有,我们将它与 accountID
和 accountName
一起插入到对象中,并为权限创建一个空数组。然后我们只需将权限添加到数组即可。
你最终会得到一个看起来像这样的对象:
{
"somebody@domain.com": {
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permissions": [
{
"permission": "Permission 1",
"nodeID": 1
},
{
"permission": "Permission 2",
"nodeID": 2
}
]
}
}
每个电子邮件地址都有一个密钥。如果需要,您可以使用 for...in
循环遍历它。