Фильтр JSON с использованием диапазона IP-адресов (JavaScript)

1

У меня есть файл JSON, где каждый объект JSON имеет уникальный идентификатор (IP-адрес)

Когда задан ряд IP-адресов, я хочу отфильтровать исходный JSON на основе заданного диапазона и сохранить его в новом файле. (т.е. все объекты JSON, имеющие IP-адрес, попадающий в данный диапазон)

JSON Файл:

[{
    "Name": "SERVER1",
    "ipv4Address": "192.168.0.50",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER2",
    "ipv4Address": "192.168.0.51",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER3",
    "ipv4Address": "192.168.0.52",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER4",
    "ipv4Address": "192.168.0.53",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER5",
    "ipv4Address": "192.168.0.54",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
}]

Если данный интервал был 192.168.0.52 - 192.168.0.54, выход должен быть:

 [{
    "Name": "SERVER3",
    "ipv4Address": "192.168.0.52",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER4",
    "ipv4Address": "192.168.0.53",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER5",
    "ipv4Address": "192.168.0.54",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
}]
  • 0
    Для начинающих узнать, как фильтровать массивы, это простой поиск в Интернете. Пожалуйста, покажите, что вы пытались. Тогда вы не упомянули, где вы будете запускать этот код ... в браузере или на сервере. Вы не можете записать в файл, используя код на стороне клиента
Теги:
filter
search
ip-address

1 ответ

1
Лучший ответ

используйте ниже фрагмент кода.

function isWithinRange(ip, lowerBound, upperBound) {

  // Put all IPs into one array for iterating and split all into their own 
  // array of segments
  var ips = [ip.split('.'), lowerBound.split('.'), upperBound.split('.')];

  // Convert all IPs to ints
  for(var i = 0; i < ips.length; i++) {

    // Typecast all segments of all ips to ints
    for(var j = 0; j < ips[i].length; j++) {
      ips[i][j] = parseInt(ips[i][j]);
    }

    // Bit shift each segment to make it easier to compare
    ips[i] = 
      (ips[i][0] << 24) + 
      (ips[i][1] << 16) + 
      (ips[i][2] << 8) + 
      (ips[i][3]);
  }

  // Do comparisons
  if(ips[0] >= ips[1] && ips[0] <= ips[2]) return true;

  return false;
}


var json = [{
    "Name": "SERVER1",
    "ipv4Address": "192.168.0.50",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER2",
    "ipv4Address": "192.168.0.51",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER3",
    "ipv4Address": "192.168.0.52",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER4",
    "ipv4Address": "192.168.0.53",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
},
{
    "Name": "SERVER5",
    "ipv4Address": "192.168.0.54",
    "OperatingSystem": [],
    "OperatingSystemServicePack": null,
    "OperatingSystemVersion": "6.3 (9600)"
}];


var newArr = [];
var lowerBound = '192.168.0.52';
var upperBound = '192.168.0.54';

json.forEach(function(item){
      var isInRange = isWithinRange(item.ipv4Address, lowerBound, upperBound);
      if(isInRange){ 
        newArr.push(item);
      }
});


console.log("new Array : ", newArr);

im, используя решение, предоставленное @SaltedBlowfish, используя его формулу Bit Shifting

ref: qaru.site/questions/7681503/...

  • 0
    Спасибо, это очень помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню