gpt4 book ai didi

javascript - 是否有用于异步 JSON 解析器的 Node 模块,它不会将整个 JSON 字符串加载到内存中?

转载 作者:IT老高 更新时间:2023-10-28 23:26:41 24 4
gpt4 key购买 nike

我意识到 there are a ton of Node modules that provide an async API for parsing JSON ,但其中许多似乎是读取整个文件或流到内存中,构造一个巨大的字符串,然后将其传递给 JSON.parse()。这就是 the second answer to "How to parse JSON using NodeJS?" suggests , 正是 jsonfile module可以。

构造一个巨大的字符串正是我想要避免的。我想要这样的 API:

parseJsonFile(pathToJsonFile): promise

其中返回的 Promise 解析为解析的 JSON 对象。此实现应使用恒定数量的内存。我对在解析各种片段时广播事件的任何类似 SAX 的东西不感兴趣:只是最终结果。

我认为 jsonparse可以做我想做的事(它显然包含了不使用 JSON.parse() 来解析 JSON 的逻辑),但是 README.md 中没有简单的示例,并且one file in the examples directory似乎过于复杂。

最佳答案

我写了一个模块来做这个:BFJ (大友好 JSON)。它导出了一堆在不同抽象级别上运行的函数,但它们的核心都是异步和流式传输。

在最高级别是两个用于读取和写入文件系统的函数,bfj.readbfj.write。他们每个人都返回一个 promise ,所以你这样称呼他们:

var bfj = require('bfj');

// Asynchronously read from a JSON file on disk
bfj.read(path)
.then(data => {
// :)
})
.catch(error => {
// :(
});

// Asynchronously write to a JSON file on disk
bfj.write(path, data)
.then(data => {
// :)
})
.catch(error => {
// :(
});

在这一层还有一个用于将数据序列化为 JSON 字符串的函数,称为 bfj.stringify:

// Asynchronously serialize data to a JSON string
bfj.stringify(data)
.then(json => {
// :)
})
.catch(error => {
// :(
});

下面是两个更通用的读取和写入流的函数,bfj.parsebfj.streamify。这些作为更高级别函数的基础,但您也可以直接调用它们:

// Asynchronously parse JSON from a readable stream
bfj.parse(readableStream).
.then(data => {
// :)
})
.catch(error => {
// :(
});

// Asynchronously serialize data to a writable stream of JSON
bfj.streamify(data).
.pipe(writableStream);

在最低级别,有两个函数类似于 SAX 解析器/序列化器,bfj.walkbfj.eventify。您不太可能想直接调用它们,它们只是更高级别实现的核心。

它是开源的并获得 MIT 许可。欲了解更多信息,请查看 the readme .

关于javascript - 是否有用于异步 JSON 解析器的 Node 模块,它不会将整个 JSON 字符串加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com