JavaScript从缓冲区到JSON的转换

7

我正在使用bleno(一个Node.js BLE包),它使用Buffer来发送和接收数据。如何获取Buffer对象并将其转换为JSON?以下是目前的代码:

bufferToJson = buffer.toString();
bufferToJson = JSON.stringify(bufferToJson)
bufferToJson = JSON.parse(bufferToJson)

缓冲区是数据所在的地方。缓冲区的一个示例可以是 {cmd:'echo'} 我尝试过 bufferToJson.cmd 但只得到了 undefine。谢谢。


buffer.toString() 的值是什么?它是否符合您的预期? - Jaromanda X
3
JSON 无法编码二进制数据。你应该解析你的缓冲区(可能是作为UTF8),或者使用base64。 - SLaks
{cmd:'echo'} 不是有效的 JSON。cmd 和 echo 需要双引号。您可以使用 eval。 - adrianj98
你需要找出缓冲区的确切格式。然后,您可以使用FileReader API将其转换为可解析JSON字符串。 - Walle Cyril
4个回答

14

如果你的缓冲区对象包含了一个有效的JSON表示,那么最简单的转换方法如下:

const json = JSON.parse(buffer);

1
JSON.stringify()添加到代码中,以便将JSON写入文件,例如:JSON.stringify(JSON.parse(buffer), null, 2) - Brian Zelip

8

以下方法可行:

var bufferToJson = JSON.parse(myBuffer.toString());

1
你可以像下面的片段一样使用TextDecoder
const buffer = await characteristic.readValue();
const decoder = new TextDecoder('utf8');
const text = decoder.decode(buffer);
console.log(JSON.parse(text));

0

对于Node.js应用程序,我发现String Decoder非常好用。

https://nodejs.org/api/string_decoder.html

// API for decoding Buffer objects into strings
const { StringDecoder } = require('string_decoder');
const decoder = new StringDecoder('utf8');

let body = Buffer.from(response.body);
let json = decoder.write(body);
let foo  = JSON.parse(json);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接