一、该问题的重现步骤是什么?
1. 最近碰到一个协议转换的问题。原数据是:{"payload":"{\"3000\":\"898\",\"3001\":\"798\",\"timestamp\":1732246420968}"},我参照物联网平台已有的项目试着写转换的脚本:
{
"id": "1",
"version": "1.0",
"method": "thing.event.property.post",
"params": {
# for(x in body) {
"${x.key}": ${x.value}${xLP.last?'':','}
# }
}
}
能转成带"payload":{} 包裹的json数据,如下图二,但是我想去掉payload,转成最终的:
{ "id": "1", "version": "1.0", "method": "thing.event.property.post", "params": { "3000": "898", "3001": "798", "timestamp": 1732246420966 }}
请问上面的我的脚本应该怎么修改?
二、你期待的结果是什么?实际看到的又是什么?
期待的结果:对beetl脚本不太熟,想问下上门的脚本应该怎么修改。
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
正在使用的产品:BladeX物联网平台
版本:1.2.0
操作系统:Windows11
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
x in body.payload
这样写试试
x in body.payload这个试过不行,会报格式不正确。
body.payload没问题的,把前面的json格式化一下
有点尴尬。发送的是如下图的json数据:{"3000":898,"3001":798,"timestamp":1732246420962},如下图1。但是通过emqx转发后会变成带了“\”的{"payload":"{\"3000\":\"898\",\"3001\":\"798\",\"timestamp\":1732246420968}"},如下图3。
这不是标准json格式,把二级json属性变成字符串了,模版引擎肯定解析不了的。
你看看是不是设备传输的时候就传的字符串,你需要做成json格式传输。如果改不了你可以自己加一个逻辑,在后端强转成map然后再转成标准json字符串。
嗯嗯呢,目前我是在自定义方法里加一层转换来解决的。
扫一扫访问 Blade技术社区 移动端