diff --git a/packages/node_modules/@node-red/nodes/core/io/10-mqtt.html b/packages/node_modules/@node-red/nodes/core/io/10-mqtt.html
index 6ba1dd4b1..274447e30 100644
--- a/packages/node_modules/@node-red/nodes/core/io/10-mqtt.html
+++ b/packages/node_modules/@node-red/nodes/core/io/10-mqtt.html
@@ -34,6 +34,7 @@
+
diff --git a/packages/node_modules/@node-red/nodes/core/io/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/io/10-mqtt.js
index f50195844..83132130d 100644
--- a/packages/node_modules/@node-red/nodes/core/io/10-mqtt.js
+++ b/packages/node_modules/@node-red/nodes/core/io/10-mqtt.js
@@ -399,16 +399,23 @@ module.exports = function(RED) {
if (this.topic) {
node.brokerConn.register(this);
this.brokerConn.subscribe(this.topic,this.qos,function(topic,payload,packet) {
- if (node.datatype =="buffer") {
+ if (node.datatype === "buffer") {
// payload = payload;
- } else if (node.datatype =="base64") {
+ } else if (node.datatype === "base64") {
payload = payload.toString('base64');
- } else if (node.datatype =="utf8") {
+ } else if (node.datatype === "utf8") {
payload = payload.toString('utf8');
+ } else if (node.datatype === "json") {
+ if (isUtf8(payload)) {
+ payload = payload.toString();
+ try { payload = JSON.parse(payload); }
+ catch(e) { node.error(RED._("mqtt.errors.invalid-json-parse"),{payload:payload, topic:topic, qos:packet.qos, retain:packet.retain}); return; }
+ }
+ else { node.error((RED._("mqtt.errors.invalid-json-string")),{payload:payload, topic:topic, qos:packet.qos, retain:packet.retain}); return; }
} else {
if (isUtf8(payload)) { payload = payload.toString(); }
}
- var msg = {topic:topic,payload:payload, qos: packet.qos, retain: packet.retain};
+ var msg = {topic:topic, payload:payload, qos:packet.qos, retain:packet.retain};
if ((node.brokerConn.broker === "localhost")||(node.brokerConn.broker === "127.0.0.1")) {
msg._topic = topic;
}
diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
index 59b39160d..8d2ba84cf 100644
--- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
+++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
@@ -353,7 +353,8 @@
"buffer": "a Buffer",
"string": "a String",
"base64": "a Base64 encoded string",
- "auto": "auto-detect"
+ "auto": "auto-detect (string or buffer)",
+ "json": "a parsed JSON object"
},
"true": "true",
"false": "false",
@@ -362,7 +363,9 @@
"not-defined": "topic not defined",
"missing-config": "missing broker configuration",
"invalid-topic": "Invalid topic specified",
- "nonclean-missingclientid": "No client ID set, using clean session"
+ "nonclean-missingclientid": "No client ID set, using clean session",
+ "invalid-json-string": "Invalid JSON string",
+ "invalid-json-parse": "Failed to parse JSON string"
}
},
"httpin": {