2016-06-23 12 views
0

ブラウザから接続しているWlanを切り替えるために別のSSIDを選択できるようにしようとしています。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" 

私は2つのESSIDさんが2回リストが、私のメインている理由はわかりません問題は、これを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]) 
}); 
}); 

最終結果:

//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); 
:また

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

+0

2台のルータが同じSSIDをブロードキャストするため、おそらく2回リストされます。多分リピーター。 – 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

I console.log(wlanlist);すべてがリストされていますが、すべてのwlanlist [0]、wlanlist [1]、wlanlist [2]などには空です。使用しても:分割演算子として..私はそれが通常のための正しい答えだと思うが、あなたの答えを受け入れる。私がそれを修正できるかどうかを見てみましょう。 – LinkM

関連する問題