Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将json文件从服务器主体转换为节点中的json对象_Node.js_Json_Parsing - Fatal编程技术网

Node.js 将json文件从服务器主体转换为节点中的json对象

Node.js 将json文件从服务器主体转换为节点中的json对象,node.js,json,parsing,Node.js,Json,Parsing,这应该很简单,但我已经坚持了一个多小时,这让我发疯 我正在使用一个API,它以压缩.json文件的形式返回数据。我已经设法解压了这些文件,但现在需要将这些文件解析为json对象 数据位于缓冲区中,如下所示: { "name": "foo1", "job": "bar1" } { "name": "foo2", "job": "bar2" } { "name": "foo3", "job": "bar3" } { "name": "foo4", "job": "bar4" } 当然,使用JSON

这应该很简单,但我已经坚持了一个多小时,这让我发疯

我正在使用一个API,它以压缩
.json
文件的形式返回数据。我已经设法解压了这些文件,但现在需要将这些文件解析为json对象

数据位于缓冲区中,如下所示:

{ "name": "foo1", "job": "bar1" }
{ "name": "foo2", "job": "bar2" }
{ "name": "foo3", "job": "bar3" }
{ "name": "foo4", "job": "bar4" }
当然,使用
JSON.parse()
解析它会失败,因为数据是
.JSON
文件,而不是JSON数组

如何正确解析此数据
fs
需要一个文件路径来读取文件,这在我的情况下(据我所知)不起作用,因为数据来自缓冲区,而不是本地文件


tl;dr:如何解析没有文件路径的
.json
文件?

您可以将缓冲区数据更改为
utf-8
字符集字符串,然后解析它:

JSON.parse(buffer.toString('utf-8'))

首先,您提供的示例(其中每一行都是表示JSON对象的字符串)不是JSON文件

它是一个包含多个JSON格式字符串的文件,每行一个

如果没有周围的数组,难怪您无法解析它

我也不确定你说的数据保存在缓冲区是什么意思

您的意思是您已经使用标准的
fs.readfile()
或变体读取了文件的内容吗

如果是这种情况,则需要将从readfile返回的
缓冲区
转换为
字符串
,如下所示:

var contents = fs.readfileSync(FILEPATH).toString()
完成此操作后,您可以使用文件内容构造一个数组,并使用以下命令将结果转换为JSON格式的字符串:

fs.readfile(FILEPATH, (err, buf) => {
  if (err) {
    throw err
  }

  let objAry = []
  buf.toString().split(/\r?\n/).forEach( line => {
    objAry.push(JSON.parse(line))
  })

  let jsonStr = JSON.stringify(objAry)

  // do something with the result string
  // possibly sending it as a response to an API
  // request as ‘Content-Type: application/json’
})

显然,您需要在此添加错误处理(try/catch)。

正如我在问题中所说的,数据不是json字符串,而是.json文件,这意味着它不能被
json.parse
@解析,所以没问题。这是一个
.json
文件。现在,如果您想通过
fs
阅读此文件,或者通过
multer
获取
HTTP请求,则它是一个
buffer
,我假设它的变量名为
buffer
。只需将数据放入缓冲区,然后执行上述操作。我希望有比拆分和添加每行更好的方法,但如果它不是有效的.json,我想现在就可以了。谢谢!