2016-06-23 2 views
0

Я пытаюсь выбрать различные SSID для переключения Wlan, с которым вы подключены, из браузера.Преобразовать список SSID в JSON/Array

var sys = require('sys'); 
var exec = require('child_process').exec; 
app.get(prefix + '/wlan', function(req, res){ 
child = exec("iwlist wlan0 scan | grep ESSID", function(error, stdout, stderr){ 
       if(error !== null){ 
        console.log('Exec error ' + error); 
       } 
       else { 
        res.send(stdout); 
       } 
}); 
}); 

Это мой код до сих пор, чтобы получить список SSID ..

Выход такова:

 
ESSID:"WLAN-GUEST" ESSID:"WLAN1" ESSID:"WLAN-GUEST" ESSID:"WLAN1" ESSID:"WLAN2" 

Я понятия не имею, почему два ESSID, перечислены в два раза, но моя главная вопрос в том, как я могу разобрать это на JSON или как я могу получить доступ к каждой записи, например массиву (wlanlist [0])?

Редактировать: Я попытался установить stdout.replace ("", ","); и JSON.parse, но поскольку он асинхронен, он отправляется без изменений. (Не уверен, если это будет работать синхронно)

Edit2: Попытка получить доступ к данным, как, что:

$(document).ready(function() { 
$.get(prefix + '/wlan', function(wlanlist){ 

    document.getElementById("wlanoptions").options[0] = new Option("Select your WLAN:",""); 
    document.getElementById("wlanoptions").options[1] = new Option(wlanlist[0],wlanlist[0]) 
}); 
}); 

Конечный результат:

var wlanlistarray = stdout.split("ESSID:"); res.send(wlanlistarray);

Дополнительно:

//extract ssid and remove quotes 
       var wlanlist = new Array; 
       var step1 = stdout.split("ESSID:"); 
       for(i = 1; i < step1.length; i++){ 
        var arr = new Array; 
        arr = step1[i].split('"'); 
        //if exists in array -> continue; else create new entry in wlanlist 
        if(wlanlist.indexOf(arr[1]) === -1){wlanlist.push(arr[1]);} 
        else{continue;} 
       } 
       res.send(wlanlist); 
+0

Вероятно, они перечислены дважды, потому что два маршрутизатора передают один и тот же SSID. Может быть, ретранслятор. – wtfzn

+0

Ах да, это может быть правдой, спасибо. – LinkM

+0

Я немного смущен здесь. Это похоже на код node.js, но вы говорите, что используете его в браузере. Вы действительно используете это в браузере? – bhspencer

ответ

1

Это должно возвращать массив SSID:

stdout.split("ESSID:") 

Теперь очистите ", и все готово.

+0

Я понимаю, что вы хотите попробовать, и я также думаю, что он должен работать, но это не stdout.split ("ESSID:"), а затем res.send (stdout); ? Но как-то Если я попытаюсь получить к нему доступ, то stdout [0] пуст. Извините, новав в этом .. – LinkM

+0

да, вы правы. stdout.split делает трюк. .split разбивает строку на все вхождения «ESSID:». Итак, первая запись пуста, потому что слева от первого «ESSID» нет ничего. Просто проверьте весь массив, а не первый элемент внутри массива. – wtfzn

+0

Если я console.log (wlanlist); все перечислено, но в каждом wlanlist [0], wlanlist [1], wlanlist [2] и т. д. он пуст. Даже при использовании: как сплит-оператор. Принимая ваш ответ, хотя, как я считаю, это правильный ответ для обычного. Посмотрим, смогу ли я это исправить. – LinkM

Смежные вопросы