Переработка JSON
Есть JSON, нужно переделать его через JavaScript.
То, что имеем:
[
{
"{#SNMPINDEX}":"8.23.53.3.230.144",
"{#BSNAPNAME}":"NEW1",
"{#BSNAPOPERATIONSTATUS}":"1",
"{#BSNAPMODEL}":"AIR",
"{#BSNAPSERIALNUMBER}":"34563456",
"{#BSNAPIPADDRESS}":"192.168.1.3"
},
{
"{#SNMPINDEX}":"8.23.53.3.230.144.1",
"{#CLCCDPAPCACHENEIGHNAME}":"switch1",
"{#CLCCDPAPCACHENEIGHADDRESS}":"0A 0A 0A 0A ",
"{#CLCCDPAPCACHENEIGHINTERFACE}":"Fa0/4"
}
]
Что хотелось бы получить:
[
{
"{#SNMPINDEX}":"8.23.53.3.230.144",
"{#BSNAPNAME}":"NEW1",
"{#BSNAPOPERATIONSTATUS}":"1",
"{#BSNAPMODEL}":"AIR",
"{#BSNAPSERIALNUMBER}":"34563456",
"{#BSNAPIPADDRESS}":"192.168.1.3"
"{#CLCCDPAPCACHENEIGHNAME}":"switch1",
"{#CLCCDPAPCACHENEIGHADDRESS}":"0A 0A 0A 0A ",
"{#CLCCDPAPCACHENEIGHINTERFACE}":"Fa0/4"
}
]
Получается, что SNMPINDEX одинаковый, за исключением единицы в самом конце.
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Попробуйте так:
const data1 = [
{
"{#SNMPINDEX}":"8.23.53.3.230.144",
"{#BSNAPNAME}":"NEW1",
"{#BSNAPOPERATIONSTATUS}":"1",
"{#BSNAPMODEL}":"AIR",
"{#BSNAPSERIALNUMBER}":"34563456",
"{#BSNAPIPADDRESS}":"192.168.1.3"
},
{
"{#SNMPINDEX}":"8.23.53.3.230.144.1",
"{#CLCCDPAPCACHENEIGHNAME}":"switch1",
"{#CLCCDPAPCACHENEIGHADDRESS}":"0A 0A 0A 0A ",
"{#CLCCDPAPCACHENEIGHINTERFACE}":"Fa0/4"
}
];
const temp = {};
for (const entry of data1) {
const SNMPINDEX = entry["{#SNMPINDEX}"].replace(/^(\d+(?:\.\d+){5})\.1$/, '$1');
if (!temp[SNMPINDEX]) {
temp[SNMPINDEX] = Object.assign({}, entry, { "{#SNMPINDEX}": SNMPINDEX });
} else {
Object.assign(temp[SNMPINDEX], entry, { "{#SNMPINDEX}": SNMPINDEX });
}
}
const data2 = Object.values(temp);
console.log(data2);
Вариант вроде бы совместимый с duktape:
const data1 = [
{
"{#SNMPINDEX}":"8.23.53.3.230.144",
"{#BSNAPNAME}":"NEW1",
"{#BSNAPOPERATIONSTATUS}":"1",
"{#BSNAPMODEL}":"AIR",
"{#BSNAPSERIALNUMBER}":"34563456",
"{#BSNAPIPADDRESS}":"192.168.1.3"
},
{
"{#SNMPINDEX}":"8.23.53.3.230.144.1",
"{#CLCCDPAPCACHENEIGHNAME}":"switch1",
"{#CLCCDPAPCACHENEIGHADDRESS}":"0A 0A 0A 0A ",
"{#CLCCDPAPCACHENEIGHINTERFACE}":"Fa0/4"
}
];
const temp = {};
for (var i = 0; i < data1.length; i++) {
const entry = data1[i];
const SNMPINDEX = entry["{#SNMPINDEX}"].replace(/^(\d+(?:\.\d+){5})\.1$/, '$1');
if (!temp[SNMPINDEX]) {
temp[SNMPINDEX] = Object.assign({}, entry, { "{#SNMPINDEX}": SNMPINDEX });
} else {
Object.assign(temp[SNMPINDEX], entry, { "{#SNMPINDEX}": SNMPINDEX });
}
}
const data2 = Object.keys(temp).map(function (key) { return temp[key]; });
console.log(data2);