代码之家  ›  专栏  ›  技术社区  ›  IgorAlves

AWS IoT Core如何正确发布JSON值中的实际新行,而不是\r\n或\r\n

  •  0
  • IgorAlves  · 技术社区  · 3 年前

    我有一个lambda(nodeJs),它读取S3 bucket中的一个文件(.ref),并在AWS IoT核心代理中的一个主题中发布其内容。 文件包含如下内容(50行):

    model:type
    aa;tp1
    bb;tpz
    cc;tpf
    dd;tp1
    

    代码必须删除第一行并检索剩余的50行。这是密码

    async function gerRef (BUCKET_NAME) {
        const refFile = version + '/file.ref'
        const ref = await getObject(FIRMWARE_BUCKET_NAME, refFile)
        //Get the file content
        const refString = ref.toString('utf8')
        //Slip by each line
        let arrRef = refString.split('\n')
        //Remove the file header
        arrRef.shift()
        //join the lines
        let refString = arrRef.join('\n')
    
        return refString
    }
    

    const publishMqtt = (params) =>
      new Promise((resolve, reject) =>
      iotdata.publish(params, (err, res) => resolve(res)))
    ...
    let refData = await gerRef (bucket1)
    let JsonPayload = {
        "attr1":"val1",
        "machineConfig":`${refData}` //Maybe here is the issue
    }
    let params = {
                topic: 'test/1',
                payload: JSON.stringify(JsonPayload) //Maybe here is the issue
                qos: '0'
            };
    
    await publishMqtt(params)
    ...
    

    然后在代理中发布。 问题是,这些内容是在没有真正的 new line

    {
         "attr1":"val1",
         "machineConfig":"aa;tp1\nbb;tpz\ncc;tpf\ndd;tp1"
    }
    

    接收此消息的机器需要一个真正的新行,如下所示:

    {
         "attr1":"val1",
         "machineConfig":"aa;tp1
                          bb;tpz
                          cc;tpf
                          dd;tp1"
    }
    

    如果我只是在AWS IoT核心接口中复制并粘贴整个JSON,它会抱怨JSON解析,但会作为字符串发布,机器会接受数据-因为新行在那里: enter image description here

    简而言之,这里的要点是:

    1. 我们可以使用JSON.stringify文件(JsonPayload)-代理将接受
    2. 我不知道如何严格遵守和保持实际的新路线

    我尝试过这些解决方案,但都不奏效: s1 , s2 s3

    1 回复  |  直到 3 年前
        1
  •  1
  •   tadman    3 年前

    机器所期望的是 . 在JSON中,值中的任何换行数据 逃走了,还有 \n 在字符串中是正确的方法。这是接受者期望的错误。

    在接收端JSON反序列化器可以处理 \不