📅  最后修改于: 2023-12-03 15:33:05.654000             🧑  作者: Mango
NDJSON(Newline Delimited JSON)是一种能够将多个JSON对象存储在一个文件中的格式,每个JSON对象单独占一行,以 "\n" 分隔。它被广泛地应用于日志、通信协议等领域。然而,在某些场景下,需要将 NDJSON 转换为普通的 JSON 格式,方便解析和处理。
本文将介绍如何将 NDJSON 转换为普通的 JSON 格式,并提供相应的实现。
将 NDJSON 转换为 JSON 的方案,主要有以下两种:
第一种方案实现较为简单,但相对较为低效,适用于数据量比较小的情况。第二种方案可以直接解析 NDJSON 文件,且实现起来相对较为简单,适用于数据量比较大的情况。
接下来,我们将介绍具体的实现方式。
在 Node.js 中,我们可以使用以下代码将 NDJSON 转换为 JSON:
const fs = require('fs');
function ndjson2json(filename) {
const data = fs.readFileSync(filename, 'utf-8');
const lines = data.split('\n');
const result = [];
for (let i = 0; i < lines.length; i++) {
if (lines[i]) {
result.push(JSON.parse(lines[i]));
}
}
return JSON.stringify(result);
}
在这个示例中,我们首先读取了 NDJSON 文件的内容,然后使用 split
方法将它拆分为行,接着逐行使用 JSON.parse
解析为 JSON,并存储到数组中。最后,我们将这个数组输出为标准的 JSON 字符串。
在 Node.js 中,我们可以使用第三方库 ndjson
将 NDJSON 转换为 JSON:
const fs = require('fs');
const ndjson = require('ndjson');
function ndjson2json(filename) {
const input = fs.createReadStream(filename);
const output = [];
return new Promise((resolve, reject) => {
input
.pipe(ndjson.parse())
.on('data', obj => output.push(obj))
.on('error', err => reject(err))
.on('end', () => resolve(JSON.stringify(output)));
});
}
在这个示例中,我们首先创建了一个可读流 input
,将 NDJSON 文件的内容作为输入,然后使用 ndjson.parse()
方法将它解析为 JSON,解析出来的对象将使用 output
数组进行缓存。最后,我们使用 Promise 返回解析完成后的 JSON 字符串。
本文介绍了将 NDJSON 转换为普通的 JSON 的方案及其实现过程。如果您使用 Node.js,建议使用第二种方案,即使用第三方库 ndjson
,可以更好的解析 NDJSON 格式,并且实现起来相对较为简单。