如何在Thingsboard CE中将XML遥测转JSON?优先用TBEL或网关转换器
在Thingsboard CE中将XML遥测数据转换为JSON的两种方法
一、优先用TBEL实现(规则链内处理)
既然你已经在规则链里确认REST响应的结构化XML是正常的,直接用TBEL内置的xmlToJson()函数就能完成转换,步骤很直接:
- 在规则链中,找到处理REST API响应的后续节点(比如添加一个脚本节点,或者直接在REST调用节点的响应处理逻辑里配置)
- 在TBEL表达式中调用转换函数,把REST响应的XML内容传入:
这里的xmlToJson(metadata.restResponse)metadata.restResponse就是你调试时看到的XML字符串,TBEL会自动将其解析为标准JSON对象。 - 把转换后的JSON赋值给消息体,比如设置
msg = xmlToJson(metadata.restResponse),之后就可以用遥测上传节点把这个JSON作为设备遥测数据上报到Thingsboard。
举个实际场景的例子:如果你的XML响应是
26.5 58 1013
转换后得到的JSON会是:
{ "telemetry": { "temperature": "26.5", "humidity": "58", "pressure": "1013" } }
如果需要提取具体字段直接作为遥测键值对,还可以在TBEL里进一步处理,比如{"temp": xmlToJson(metadata.restResponse).telemetry.temperature}。
二、用Thingsboard Gateway转换器实现
也可以通过网关完成XML到JSON的转换,适合需要在数据进入Thingsboard之前就完成格式转换的场景,步骤如下:
- 打开网关的配置文件(通常是
thingsboard.yml或者单独的converters配置文件),添加一个自定义脚本转换器。 - 选择脚本类型(JavaScript或Python),编写XML转JSON的逻辑。比如用JavaScript脚本的话,可以利用网关内置的XML解析能力:
function convertToJson(xmlString) { // 简单示例:解析结构化XML为JSON const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlString, "text/xml"); const telemetry = {}; telemetry.temperature = xmlDoc.getElementsByTagName("temperature")[0].textContent; telemetry.humidity = xmlDoc.getElementsByTagName("humidity")[0].textContent; return telemetry; } // 网关会自动传入获取到的XML数据,这里处理后返回JSON return convertToJson(msg.payload); - 配置对应的数据源(比如HTTP数据源,设置好目标API的调用地址和参数),将这个转换器与数据源关联。网关在获取到API返回的XML后,会自动执行转换脚本,把结果以JSON格式上报到Thingsboard。
注意事项
- TBEL方法更轻量化,适合规则链内的临时转换需求,不需要额外部署组件;
- 网关转换器适合长期、批量的数据源接入,能在数据传输到TB前完成格式统一,减轻规则链的处理压力。
内容的提问来源于stack exchange,提问作者tomtomnz
相关产品推荐
相关产品推荐

