将对象转换为缓冲区以及将缓冲区转换为对象

问题描述 投票:0回答:1

演示

const result =    [
  {                                  // This is sample data BUT there can be multiple objects
    "name": "object1",
    "id": "1",
    "timeseriesData": [
      [
        1548979200000,                // epoc timestamp
        325.3                         // value in number
      ],
      [
        1548979260000,
        325.8
      ],
      [
        1548979320000,
        324.2
      ],
      [
        1548979380000,
        323.7
      ],
      [
        1548979440000,
        322.3
      ],
      [
        1548979500000,
        322
      ]
    ]
  },
  {
    "name": "object2",
    "id": "2",
    "timeseriesData": [
      [
        1548989200000,
        625.3
      ],
      [
        1548989260000,
        625.8
      ],
      [
        1548989320000,
        624.2
      ],
      [
        1548989380000,
        623.7
      ],
      [
        1548989440000,
        622.3
      ],
      [
        1548989500000,
        622
      ]
    ]
  }
]

const splitInChunks = (sizeInBytes) =>   // Don't think this is helping to create proper chunks
    (buffer) => {
        console.log(buffer);
        const size = Buffer.byteLength(buffer.buffer);

        let start = 0;
        let end = sizeInBytes;

        const chunks = [];

        do {
            chunks.push(buffer.subarray(start, end));
            start += sizeInBytes;
            end += sizeInBytes;
        } while (start < size);

        return chunks;
    };
    
   
const chunks = splitInChunks(32)(Buffer.from(JSON.stringify(result)));
console.log("chunks length", chunks.length)
console.log('chunks[0]-', chunks[0])
console.log(JSON.parse(Buffer.concat(chunks)))

出于某种原因,我想使用如下所示的一些附加数据创建每个块的缓冲区,并将其存储在转换后的变量中。但由于某种原因,我无法从转换后的变量中获取原始对象。

const converted = chunks.map(c=> Buffer.from(JSON.stringify({requestId:"123", buf: c})));
console.log("converted length", converted.length)
const result1 = [];
for (let con of converted) {
  const eachChunkBuf = JSON.parse(con);
  result1.push(eachChunkBuf.buf)
}
console.log('result1', result1)
console.log(JSON.parse(Buffer.concat(result1)))  // I want result1 to print original object but it doesn't work.
javascript node.js arrays buffer
1个回答
0
投票

控制台中的错误表明 Buffer.concat 函数不满意,需要一个 Buffer 数组,但得到的是对象。

我认为错误来自于你的这段代码:

for (let con of converted) {
  const eachChunkBuf = JSON.parse(con);
  result1.push(eachChunkBuf.buf)
}

当您解析 JSON 时,它不会保留缓冲区的类型。所以你只需要确保eachChunkBuf.buf实际上是一个缓冲区,然后再推回到results1。

for (let con of converted) {
  const eachChunkBuf = JSON.parse(con);
  result1.push(Buffer.from(eachChunk.buf));
}
© www.soinside.com 2019 - 2024. All rights reserved.