NodeRed节点间通过JSON传递数据是比较方便的。通常我们需要把传感器采集到数据放入到JSON中,由于刚接触nodejs,我参照网上例程编写了一个NodeRed上可行的程序,与大家分享,如果大家有更好的方法,请指教!
先上流图:
主要程序在函数节点中,如下:
var time=Date.now();
// var JSONString="{\"id\":\"10000010\", \"name\":\"bar\", \"age\":22, \"isMale\":false}";//字符串示例
var t= "\"time\":"+time;
var t1="\"cnt\":" +(time-100);
var JSONString="{" +t+','+ t1 +"}";
var jsonObj = JSON.parse(JSONString);
msg.payload=jsonObj;
return msg;
time是准备放入JSON中的变量,我就用时间戳代替。一般字符串转换成JSON数据,需要如下的格式:
var JSONString="{\"id\":\"10000010\", \"name\":\"bar\", \"age\":22, \"isMale\":false}";//字符串示例
输出结果:
完整程序:
[
{
"id": "a4224af272f9a52e",
"type": "tab",
"label": "流程 3",
"disabled": false,
"info": "",
"env": []
},
{
"id": "e0d491608a37f5c0",
"type": "inject",
"z": "a4224af272f9a52e",
"name": "",
"props": [
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 310,
"y": 280,
"wires": [
[
"4e5b04691f83335b"
]
]
},
{
"id": "4e5b04691f83335b",
"type": "function",
"z": "a4224af272f9a52e",
"name": "字符串拼接构成JSON数据",
"func": "var time=Date.now();\n// var JSONString=\"{\\\"id\\\":\\\"10000010\\\", \\\"name\\\":\\\"bar\\\", \\\"age\\\":22, \\\"isMale\\\":false}\";//字符串示例\nvar t= \"\\\"time\\\":\"+time;\nvar t1=\"\\\"cnt\\\":\" +(time-100);\nvar JSONString=\"{\" +t+','+ t1 +\"}\";\nvar jsonObj = JSON.parse(JSONString);\nmsg.payload=jsonObj;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 510,
"y": 280,
"wires": [
[
"c43134b63a48812f"
]
]
},
{
"id": "c43134b63a48812f",
"type": "debug",
"z": "a4224af272f9a52e",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 730,
"y": 280,
"wires": []
}
]
修正的代码:
// var time = Date.now();
// var t = "\"time\":" + time;
// var t1 = "\"cnt\":" + (time - 100);
// var dev = "\"devname\":" + '"发电机"'; // 确保中文字符用双引号包裹
// var JSONString = "{" + t + ',' + t1 + ',' + dev + "}";
// var jsonObj = JSON.parse(JSONString);
// msg.payload = jsonObj;
// return msg;
var time = Date.now();
var t = "\"time\":" + time;
var t1 = "\"cnt\":" + (time - 100);
var dev = "\"devname\":" + '"发电机"'; // 确保中文字符用双引号包裹
// 构建 JSON 字符串
var JSONString = "{" + t + ',' + t1 + ',' + dev + "}";
// 不再使用 JSON.parse(),直接将 JSON 字符串传递给 msg.payload
msg.payload = JSONString;
// 返回 msg
return msg;
Lua tcp发送json数据
ubunutu安装必要库
luarocks install lua-cjson
luarocks install luasocket
lua源码
-- 引入必要的库
local socket = require("socket")
local cjson = require("cjson")
-- 创建 TCP socket
local tcp = socket.tcp()
-- 连接到 TCP 服务器
local host = "127.0.0.1" -- 服务器地址
local port = 12345 -- 服务器端口
tcp:connect(host, port)
-- 构造含有中文的 JSON 数据
local data = {
time = os.time(),
cnt = os.time() - 100,
devname = "发电机"
}
-- 将 Lua 表转换为 JSON 字符串
local jsonString = cjson.encode(data)
-- 发送 JSON 字符串到 TCP 服务器
tcp:send(jsonString .. "\n") -- 发送数据并加上换行符
-- 关闭 socket
tcp:close()