Javascript JSON.parse SyntaxError:使用JSON解析文件时出现意外标记{
我在尝试分析包含以下文本的文件时遇到问题:Javascript JSON.parse SyntaxError:使用JSON解析文件时出现意外标记{,javascript,json,node.js,Javascript,Json,Node.js,我在尝试分析包含以下文本的文件时遇到问题: { "type": "header", "log_level": 3, "target_port": 80, "source_port_first": 32768, "source_port_last": 61000, "max_targets": -1, "max_runtime": 0, "max_results": 0, "iface": "en0", "rate": 0, "bandwidth": 0, "cooldown_secs": 8,
{ "type": "header", "log_level": 3, "target_port": 80, "source_port_first": 32768, "source_port_last": 61000, "max_targets": -1, "max_runtime": 0, "max_results": 0, "iface": "en0", "rate": 0, "bandwidth": 0, "cooldown_secs": 8, "senders": 7, "use_seed": 0, "seed": 0, "generator": 0, "packet_streams": 1, "probe_module": "tcp_synscan", "output_module": "json", "gw_mac": "00:00:00:00:00:00", "source_ip_first": "127.0.0.1", "source_ip_last": "127.0.0.1", "output_filename": ".\/static\/results\/80.json", "whitelist_filename": ".\/static\/whitelist.conf", "dryrun": 0, "summary": 0, "quiet": 1, "recv_ready": 0 }
{ "type": "result", "saddr": "127.0.0.1" }
这是一个Zmap输出,node.js会在第一行之后阻塞所有内容。如果从文件中删除第二行,则不会出现错误,并且程序运行正常
我希望能够读取文件中的JSON数据,能够引用每个键和值,并在console.log中打印出来
以下是我当前的代码:
var fs = require('fs');
var filename = './80.json';
var bufferString;
function ReadFile(callback) {
fs.readFile(filename, 'utf-8', function(err, data) {
bufferString = data;
callback();
});
}
function PrintLine() {
console.log(JSON.parse(bufferString));
}
ReadFile(PrintLine)
实际上,我想将所有这些数据放入数据库,但我需要解决正确读取文件的问题。这样的文件中不能有多个JSON对象。如果要在JSON中存储两个对象,需要将它们添加到数组中:
[
{ "type": "header", ..., "recv_ready": 0 },
{ "type": "result", "saddr": "127.0.0.1" }
]
您可以使用每个对象的索引访问它们:
var json = JSON.parse(bufferString);
json[0]; // this is the first object (defined on the first line)
json[1]; // this is the second object (defined on the second line)
如前所述,JSON是无效的。但是,如果每个对象位于新行上,您也可以处理每一行,而不是将文件中的JSON转换为对象数组: 但是,请注意,正如@jsve所指出的,您的文件将仍然是一个
JSON
冒名顶替者
函数PrintLine(){
var lines=bufferString.split('\n'),
tmp=[],
len=线条长度;
对于(变量i=0;i
这是80.json
的确切内容吗?因为如果是,它是无效的json,因此会出错。您有权访问此文件吗?这是无效的json,因为一个文件中有两个json字符串。如果您先在换行处拆分,您可能可以逐个读取它们。您的意思是该文件有多行,每行都有一个对象?Define“窒息”。或者,如果您知道每行始终有一个对象,只需将每行传递给JSON.parse
,而不是while文件。但我不会将该文件命名为.JSON
。但从技术上讲,该文件不是JSON。好吧,没错。那么该文件就不值得使用其.JSON
扩展名,但我想这样做g如果文件是自动生成的,这样的事情可能会有帮助。在这种情况下,自动生成逻辑可能应该更改…但是在注释中继续讨论这一点是没有建设性的:)。
function PrintLine() {
var lines = bufferString.split('\n'),
tmp = [],
len = lines.length;
for(var i = 0; i < len; i++) {
// Check if the line isn't empty
if(lines[i]) tmp.push( JSON.parse(lines[i]) );
}
lines = tmp;
console.log(lines[0], lines[1]);
}
ReadFile(PrintLine);