node.js将接收到的字符串拆分为不同的变量,然后格式化为json字符串

时间:2016-04-05 14:58:34

标签: javascript json node.js

我有一个来自http://www.hacksparrow.com/node-js-udp-server-and-client-example.html的udp脚本我要修改它以便它接收的字符串'filename lat lon'分别被分成单独的变量'filename''lat'和'lon',然后格式化为json字符串。

{     “name”:“filename”,       “type”:“Point”,       “坐标”:[lat,lon]     }     )

这是我用来接收字符串的脚本:

var PORT = 33333; var HOST ='127.0.0.1'; var dgram = require('dgram'); var server = dgram.createSocket('udp4'); server.on('listening',function(){var address = server.address(); console.log('UDP服务器监听'+ address.address +“:”+ address.port);}); server.on('message',function(message,remote){console.log(''+ message);}); server.bind(PORT,HOST);

该字符串的一个例子是'1491.wav -78.2371 43.8019'

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为a应该有文件名,而bc应该是coords。

您可以使用regular expression标识所需字符串的各个部分,使用捕获组捕获这些部分中的文本,然后使用结果创建一个对象(而不是JSON)。如果您需要JSON(文本字符串),则可以通过JSON.stringify将对象转换为JSON。

var str = "000001.wav -73.778889 40.639722";
var parts = /^\s*([^ ]+) +([-\d.]+) +([-\d.]+)\s*$/.exec(str);
if (!parts || isNaN(parts[2]) || isNaN(parts[3])) {
  document.body.innerHTML = "Invalid string";
} else {
  // String was as expected
  var obj = {
    name: parts[1],
    type: "Point",
    coordinates: [
      +parts[2],
      +parts[3]
    ]
  };
  document.body.innerHTML = JSON.stringify(obj);
}

这是正则表达式解释的(也是on regex101):

  • ^ - 输入开始
  • \s* - 零个或多个空白字符
  • ([^ ]+) - 一个或多个不是空格的字符,包含在捕获组((...))中,以便我们以后可以获取匹配的文本
  • + - 一个或多个空格
  • ([-\d.]+) - 一个或多个字符-.或任何数字(这不是限制,但......);抓住它,这是第一个coord
  • + - 一个或多个空格
  • ([ - \ d。] +)` - 第二个coord,捕获
  • \s* - 零个或多个空格字符
  • $ - 字符串结尾

RegExp#exec如果字符串匹配则返回一个数组,第0个元素是完整字符串,然后按顺序返回捕获组。

上面的代码使用+parts[2]+parts[3]将包含坐标的字符串转换为数字。

它还使用isNaN来检查字符串是否可以正确强制转换为数字。