出于某种原因,我很难将这个txt文件转换为实际的javascript数组。
myJson.txt
{"action": "key press", "timestamp": 1523783621, "user": "neovim"}
{"action": "unlike", "timestamp": 1523784584, "user": "r00k"}
{"action": "touch", "timestamp": 1523784963, "user": "eevee"}
{"action": "report as spam", "timestamp": 1523786005, "user": "moxie"}
目前我所拥有的不起作用
const fs = require('fs');
function convert(input_file_path) {
const file = fs.readFileSync(input_file_path, 'utf8');
const newFormat = file
.replace(/(\r\n\t|\n|\r\t)/gm,'')
.replace(/}{/g, '},{');
console.log([JSON.parse(newFormat)]);
}
convert('myJson.txt');
答案 0 :(得分:3)
我会以这种方式做到这一点
var fs = require('fs');
var readline = require('readline');
var array = [];
var input = null;
var rd = readline.createInterface({
input: fs.createReadStream(__dirname+'/demo.txt')
});
rd.on('line', function(line) {
array.push(JSON.parse(line));
});
rd.on('close', function(d){
array.forEach(e=>console.log(e.action))
})
这里发生的是,我正在使用readline
来阅读文件的行,nodejs
是JSON
的核心模块之一。倾听事件并做所需的事情。
是的,您必须将该行解析为if (this.readyState == 4 && this.status == 200) {
;)
由于
答案 1 :(得分:2)
由于您的文件每行包含一个JSON对象,因此您可以使用readline
逐行读取该文件。
然后解析每一行,并推入一个数组,然后在完全读取文件后返回(解析)。
'use strict';
const fs = require('fs');
const readline = require('readline');
function convert(file) {
return new Promise((resolve, reject) => {
const stream = fs.createReadStream(file);
// Handle stream error (IE: file not found)
stream.on('error', reject);
const reader = readline.createInterface({
input: stream
});
const array = [];
reader.on('line', line => {
array.push(JSON.parse(line));
});
reader.on('close', () => resolve(array));
});
}
convert('myJson.txt')
.then(res => {
console.log(res);
})
.catch(err => console.error(err));
答案 2 :(得分:0)
您的代码存在的问题是您试图将JS数组解析为JSON数组。而JSON数组字符串只能是字符串。
这是您要尝试做的事情:
jsArray = ['{"foo": "bar"}, {"foo":"baz"}']
这是一个有效的JS数组,其中包含单个字符串值'{“ foo”:“ bar”},{“ foo”:“ baz”}'。
同时
jsonArrayStr = '["{"foo": "bar"}, {"foo":"baz"}"]'
这是有效的JSON数组字符串(因为方括号是字符串的一部分)。
为了使您的代码运行,您需要在解析字符串之前在字符串中添加方括号。
function convert(input_file_path) {
const file = fs.readFileSync(input_file_path, 'utf8');
const newFormat = file
.replace("{", "[{")
.replace(/}$/, "}]")
console.log(JSON.parse('[' + newFormat + ']'));
}