У меня есть файл 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)"
}]
используйте ниже фрагмент кода.
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