Node.js 将json文件从服务器主体转换为节点中的json对象
这应该很简单,但我已经坚持了一个多小时,这让我发疯 我正在使用一个API,它以压缩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
.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,我想现在就可以了。谢谢!