【问题标题】:Convert SSID list to JSON/Array将 SSID 列表转换为 JSON/数组
【发布时间】:2016-06-23 14:07:59
【问题描述】:

我正在尝试让选择不同的 SSID 来切换您从浏览器连接到的 Wlan。

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);

【问题讨论】:

  • 它们可能被列出两次,因为两个路由器广播相同的 SSID。也许是中继器。
  • 啊,这可能是真的,谢谢。
  • 我在这里有点困惑。这看起来像 node.js 代码,但您说您正在浏览器中运行它。你真的在浏览器中运行它吗?
  • 也是你传递给 exec 调用的命令,不应该是字符串吗?
  • 是的,它是 node.js 代码,它是服务器端的,由 ajax 请求访问,以创建具有 SSID 的动态选择框。我是新手,不确定我是否做对了。是的,它是一个字符串,不知何故忘记复制它。已编辑,谢谢。

标签: javascript arrays json node.js ssid


【解决方案1】:

这应该返回一个 SSID 数组:

stdout.split("ESSID:")

现在清理",你就完成了。

【讨论】:

  • 我明白你想尝试什么,我也认为它应该可以工作,但不是 stdout.split("ESSID:") 和之后 res.send(stdout); ?但不知何故,如果我稍后尝试访问它,stdout[0] 是空的。抱歉,对这个很陌生..
  • 是的,你是对的。 stdout.split 可以解决问题。 .split 按所有出现的“ESSID:”分割字符串。所以第一个条目是空的,因为第一个“ESSID”的左边没有任何内容。只需检查整个数组而不是数组中的第一项。
  • 如果我 console.log(wlanlist);列出了所有内容,但在每个 wlanlist[0]、wlanlist[1]、wlanlist[2] 等处,它都是空的。即使使用 : 作为拆分运算符.. 接受您的答案,因为我认为这是通常的正确答案。让我们看看我能不能解决这个问题。
猜你喜欢
  • 2013-08-22
  • 1970-01-01
  • 2022-09-24
  • 2020-04-27
  • 2012-06-13
  • 1970-01-01
  • 2021-10-18
  • 2020-08-08
  • 2015-08-06
相关资源
最近更新 更多