I am new to Node Red and I want to parse the data coming in via serial port, and convert it to JSON format.
The data string I'm getting is from a demo board, and it arrives every one second as follows:
| Hum[%]: 56.00 | Temp[C]: 21.50 | Pres[hPa]: 966.11 | Temp2[C]: 21.30 | Acc[mg]: 10 -25 1030 | Gyr[mdps]: 2170 -3500 1400 | Acc2[mg]: 27 -26 979 | Mag[mGauss]: -4 163 166 |
I would like to be able to form a JSON, with the following format:
{
"hum" : "value",
"temp" : "value",
"pres" : "value",
"acc" : "value",
"gyr" : "value",
"pres" : "value",
"temp_2" : "value",
"acc" : "value",
"gyr" : "value",
"acc_2" : "value",
"mag" : "value",
}
Try this in a function node-
let text = msg.payload.slice(1, -1) //remove outer |
text = text.split("|") //use | as separator
let data = {
"hum": "value",
"temp": "value",
"pres": "value",
"temp_2": "value",
"acc": "value",
"gyr": "value",
"acc_2": "value",
"mag": "value",
}
const key=Object.keys(data) // list of keys
for (let index = 0; index < text.length; index++) { //iterate over text
let element = text[index].split(":"); // split out the value
data[key[index]] = element[1].trim() //set required key to value without exta spaces
}
msg.payload= data
return msg;
Thanks for taking the time!
I will test the code.
Regards!
Its based on injectiong this -
| Hum[%]: 56.00 | Temp[C]: 21.50 | Pres[hPa]: 966.11 | Temp2[C]: 21.30 | Acc[mg]: 10 -25 1030 | Gyr[mdps]: 2170 -3500 1400 | Acc2[mg]: 27 -26 979 | Mag[mGauss]: -4 163 166 |
I changed the object to match the payload content as your sample object had some duplicates.
Let me know how you get on with it 