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);