Переработка 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);

→ Ссылка