将服务器主体中的 json 文件转换为节点中的 json 对象
Posted
技术标签:
【中文标题】将服务器主体中的 json 文件转换为节点中的 json 对象【英文标题】:Convert a json file from server body to a json object in node 【发布时间】:2019-06-07 14:34:31 【问题描述】:这应该很简单,但我已经坚持了一个多小时,这让我发疯了。
我正在使用一个 API,它将数据作为压缩的 .json
文件返回。我已经设法解压文件,但现在需要将这些文件解析为 json 对象。
数据在缓冲区中,如下所示:
"name": "foo1", "job": "bar1"
"name": "foo2", "job": "bar2"
"name": "foo3", "job": "bar3"
"name": "foo4", "job": "bar4"
当然,用JSON.parse()
解析它会失败,因为数据是.json
文件,而不是jsons 数组。
如何正确解析这些数据? fs
需要一个文件路径来读取文件,这在我的情况下不起作用(据我所知),因为数据来自缓冲区,而不是来自本地文件。
tl;dr:我如何解析没有文件路径的 .json
文件?
【问题讨论】:
【参考方案1】:您可以将缓冲区数据更改为utf-8
charset String 然后解析它:
JSON.parse(buffer.toString('utf-8'))
【讨论】:
正如我在问题中所说,数据不是json字符串,它是一个.json文件,这意味着它不能被JSON.parse
解析。
@Malfunction 没问题。这是一个.json
文件。现在,如果您想使用fs
阅读此内容,或者通过multer
获取它的小瓶multipart
HTTP 请求,它是buffer
,我假设它的变量名是buffer
。只需将您的数据放在缓冲区中,然后执行上述操作。【参考方案2】:
首先,您提供的示例(其中每一行是代表 JSON 对象的字符串)不是 JSON 文件。
这是一个包含多个 JSON 格式字符串的文件,每行一个。
没有环绕数组,难怪解析不出来。
我也不确定您所说的将数据保存在缓冲区中是什么意思。
您的意思是您已经使用标准fs.readfile()
或变体读取了文件的内容?
如果是这种情况,您需要将从您的 readfile 返回的 Buffer
转换为 String
,如下所示:
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 对象的主要内容,如果未能解决你的问题,请参考以下文章
无法将 groupby 数据集转换为 pandas 中的 json [重复]
将首先转换为 Observable 的 json 文件转换为打字稿中的地图,角度
是否可以将所有阶段变量添加到嵌套 JSON 结构中的主体映射模板中?
Kotlin > Spring Boot > 使用路由器 DSL,POST 方法主体,无法将 JSON 转换为 POJO