我有一个来自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'
谢谢!
答案 0 :(得分:1)
我认为a
应该有文件名,而b
和c
应该是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 +
- 一个或多个空格\s*
- 零个或多个空格字符$
- 字符串结尾 RegExp#exec
如果字符串匹配则返回一个数组,第0个元素是完整字符串,然后按顺序返回捕获组。
上面的代码使用+parts[2]
和+parts[3]
将包含坐标的字符串转换为数字。
它还使用isNaN
来检查字符串是否可以正确强制转换为数字。