【问题标题】:Convert a node.js buffer to string and then to JSON将 node.js 缓冲区转换为字符串,然后转换为 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 我添加了字符串

标签: javascript node.js stream buffer


【解决方案1】:
var buf = Buffer.from(JSON.stringify(obj));
var temp = JSON.parse(buf.toString());

【讨论】:

    【解决方案2】:

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

    相关 StackOverflow 帖子 - 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 中出来
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多