将逗号分隔的 JSON 转换为换行符分隔的节点
Converting comma delimited JSON to a newline delimited node
我有一个 JSON 文件,我正在使用节点读取该文件,修改并将其保存为 json 文件。
我希望将新 json 保存为换行符分隔而不是在数组中。
我遇到了 https://github.com/CrowdProcess/newline-json 但不完全理解流。如果我有以下流设置,我如何通过解析器和字符串化器将其通过管道传输?
fileStream = fs.createReadStream('source.json')
writeStream = fs.createWriteStream('output.txt');
var Parser = require('newline-json').Parser;
var Stringifier = require('newline-json').Stringifier;
var parser = new Parser();
var stringifier = new Stringifier();
但是运行下面只输出一个空白文件
fileStream.pipe(parser).pipe(stringifier).pipe(writeStream)
关于流我错过了什么?
将 JSON 数组转换为换行符分隔的 JSON 实体流的一种方法是使用带有 -c 选项的 jq,例如
$ jq -c ".[]"
输入:
[[1,2], 3, {"4":5}]
输出:
[1,2]
3
{"4":5}
在 node.js 中,您可以使用 node-jq
包来执行 @peak 上面显示的操作。
var stream = require('stream');
var fs = require('fs');
const jq = require('node-jq');
var fileName = 'YOUR_FILE_NAME'; //e.g abc.json
var bucketName = 'YOUR_BUCKET NAME'; // e.g gs://def
var dataStream = new stream.PassThrough();
async function formatJson() {
jq.run('.[]', fileName, {output: 'compact'})
.then((output) => {
dataStream.push(output)
dataStream.push(null)
console.log(dataStream)
})
.catch((err) => {
console.log(err)
})
}
formatJson()
我不是一个有经验的节点人,如果代码笨拙但它有效,我深表歉意。
对于正在寻找有关如何将 json 对象数组转换为 nd-json 的解决方案的任何人。这是解决方案:
输入:
const arrObj = [{
id: 1,
name: 'joe'
}, {
id: 2,
name: 'ben'
}, {
id: 3,
name: 'jake'
}, {
id: 4,
name: 'marsh'
}];
// stringify the object and join with \n
const ndJson = arrObj.map(JSON.stringify).join('\n');
console.log(ndJson);
输出:
{"id":1,"name":"joe"}
{"id":2,"name":"ben"}
{"id":3,"name":"jake"}
{"id":4,"name":"marsh"}
示例Usecase:将批量请求从json文件导入elasticsearch[=26时=].
快乐编码:)
我有一个 JSON 文件,我正在使用节点读取该文件,修改并将其保存为 json 文件。
我希望将新 json 保存为换行符分隔而不是在数组中。
我遇到了 https://github.com/CrowdProcess/newline-json 但不完全理解流。如果我有以下流设置,我如何通过解析器和字符串化器将其通过管道传输?
fileStream = fs.createReadStream('source.json')
writeStream = fs.createWriteStream('output.txt');
var Parser = require('newline-json').Parser;
var Stringifier = require('newline-json').Stringifier;
var parser = new Parser();
var stringifier = new Stringifier();
但是运行下面只输出一个空白文件
fileStream.pipe(parser).pipe(stringifier).pipe(writeStream)
关于流我错过了什么?
将 JSON 数组转换为换行符分隔的 JSON 实体流的一种方法是使用带有 -c 选项的 jq,例如
$ jq -c ".[]"
输入:
[[1,2], 3, {"4":5}]
输出:
[1,2]
3
{"4":5}
在 node.js 中,您可以使用 node-jq
包来执行 @peak 上面显示的操作。
var stream = require('stream');
var fs = require('fs');
const jq = require('node-jq');
var fileName = 'YOUR_FILE_NAME'; //e.g abc.json
var bucketName = 'YOUR_BUCKET NAME'; // e.g gs://def
var dataStream = new stream.PassThrough();
async function formatJson() {
jq.run('.[]', fileName, {output: 'compact'})
.then((output) => {
dataStream.push(output)
dataStream.push(null)
console.log(dataStream)
})
.catch((err) => {
console.log(err)
})
}
formatJson()
我不是一个有经验的节点人,如果代码笨拙但它有效,我深表歉意。
对于正在寻找有关如何将 json 对象数组转换为 nd-json 的解决方案的任何人。这是解决方案:
输入:
const arrObj = [{
id: 1,
name: 'joe'
}, {
id: 2,
name: 'ben'
}, {
id: 3,
name: 'jake'
}, {
id: 4,
name: 'marsh'
}];
// stringify the object and join with \n
const ndJson = arrObj.map(JSON.stringify).join('\n');
console.log(ndJson);
输出:
{"id":1,"name":"joe"}
{"id":2,"name":"ben"}
{"id":3,"name":"jake"}
{"id":4,"name":"marsh"}
示例Usecase:将批量请求从json文件导入elasticsearch[=26时=].
快乐编码:)