将 node.js 缓冲区转换为字符串,然后转换为 JSON

Posted

技术标签:

【中文标题】将 node.js 缓冲区转换为字符串,然后转换为 JSON【英文标题】:Convert a node.js buffer to string and then to JSON 【发布时间】:2018-06-03 17:20:07 【问题描述】:

我有一个 node.js 读取流,它发出一个缓冲区并使用 toString() 函数将缓冲区转换为字符串,然后当我尝试通过 JSON.parse() 函数将字符串转换为 JSON 时,它会引发解析错误。

有没有最好的方法将缓冲区转换为字符串,然后将该字符串转换为 JSON?

JSON 字符串如下所示,

[“data1”:1487328824948,“加密”:false,“版本”:“1.0.0”,“data2”:“value2”,“data3”:“value3”,“data4”:“value4” ,“data5”:“value5”,“data1”:148732882448,“加密”:false,“版本”:“1.0.0”,“data2”:“value2”,“data3”:“value3”,“ data4": "value4", "data5": "value5"......]

【问题讨论】:

能否请您发布由 toString() 转换的字符串 @shivshankar 我添加了字符串 【参考方案1】:
var buf = Buffer.from(JSON.stringify(obj));
var temp = JSON.parse(buf.toString());

【讨论】:

【参考方案2】:

我能够使用 JSONStream 包解析传入的流。 https://github.com/dominictarr/JSONStream,在这个用例中真的帮助了我,一个很好用的工具。

相关 *** 帖子 - Parse large JSON file in Nodejs

【讨论】:

【参考方案3】:

这似乎是正确的方法,但在调用 JSON.parse() 之前,您的 readstream 似乎没有完成读取输入。因此 JSON.parse() 调用仅解析部分 JSON 字符串,然后您会收到错误消息。

尝试确保 read() 完成 - 使用 readSync()?

【讨论】:

我在这里处理的读取流来自一个 tar.gz 文件,当数据到来时,它会在我做的 .on('data') 侦听器中连续流式传输 JSON 格式的字符串缓冲区到字符串的转换,然后通过 JSON.parse 将其转换为对象,这样我就可以开始解析它了。不确定 readSync 是否在这里提供帮助,并且由于 tar.gz 的大小非常大,也可能会减慢进程。 我添加了我正在处理的 JSON 字符串,类似于我发布的那个,它不断从 tar.gz 中出来

以上是关于将 node.js 缓冲区转换为字符串,然后转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 如何将流转换为字符串

Node.js - 将数据缓冲到 Ffmpeg

将rowdatapacket转换为数组,如何将mysql node.js api rowdatapacket转换为数组,将字符串转换为数组

将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]

如何在 Node.js 中读取文件内容并将数据转换为 JSON?

在 Node.js 中响应 JSON 对象(将对象/数组转换为 JSON 字符串)