协议转换脚本问题

Blade 未结 1 106
xiaoliu
xiaoliu 2024-11-24 17:05

一、该问题的重现步骤是什么?

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  }}

请问上面的我的脚本应该怎么修改?

image.png


image.png


二、你期待的结果是什么?实际看到的又是什么?

期待的结果:对beetl脚本不太熟,想问下上门的脚本应该怎么修改。


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

正在使用的产品:BladeX物联网平台

版本:1.2.0

操作系统:Windows11


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (楼主)
    2024-11-24 18:21

    x in body.payload


    这样写试试

    作者追问:2024-11-24 18:21

    x in body.payload这个试过不行,会报格式不正确。

    image.png

    image.png

    回答: 2024-11-24 18:21

    body.payload没问题的,把前面的json格式化一下

    CleanShot20241125101930@2x.png

    作者追问:2024-11-24 18:21

    有点尴尬。发送的是如下图的json数据:{"3000":898,"3001":798,"timestamp":1732246420962},如下图1。但是通过emqx转发后会变成带了“\”的{"payload":"{\"3000\":\"898\",\"3001\":\"798\",\"timestamp\":1732246420968}"},如下图3。

    image.png


    image.png


    image.png

    回答: 2024-11-24 18:21

    这不是标准json格式,把二级json属性变成字符串了,模版引擎肯定解析不了的。

    你看看是不是设备传输的时候就传的字符串,你需要做成json格式传输。如果改不了你可以自己加一个逻辑,在后端强转成map然后再转成标准json字符串。

    作者追问:2024-11-24 18:21

    嗯嗯呢,目前我是在自定义方法里加一层转换来解决的。

    image.png

    0 讨论(0)
提交回复