我正在尝试使用CasperJS从网站上抓取一些页面,并使用结果创建一个JSON文件。但是,我在创建有效的JSON文件时遇到了麻烦。
为每个页面运行的相关代码示例:
casper.then(function(){
var fs = require('fs');
fs.write('results.json', JSON.stringify(result), 'a');
this.echo(JSON.stringify(result, undefined, 4));
casper.then(getNextPage);
});
这会创建一个JSON文件,以“[”开头,每个页面以“]”结尾,如下所示:
[{"Name":"Name1","Price":"10"},(...),{"Name":"Name45","Price":"20"}][{"Name":"Name46","Price":"4.20"}, etc...
我在浏览器中阅读时出现以下错误:
"Error: Parse error on line 1: ...key-steam-arma-3/"}][{"Name":"HearthSton -----------------------^ Expecting 'EOF', '}', ',', ']'
从this similar question阅读答案后,我意识到我无法将对象附加到现有对象,因为在JSON中,必须有一个顶级项目。但是,即使我理解错误的来源,我也无法找到解决方案(由于我的JSON输出不同,本文中的解决方案对我不起作用)。
在过去的几个小时里,我一直在试图想出一些东西,但没有成功。我已经尝试将流的编码更改为UTF-8,但这也不起作用。我很抱歉,如果这是一个愚蠢的问题,因为我是CasperJS和javascript的新手。如果有人能指出我正确的方向,那将非常感激!
答案 0 :(得分:1)
您可以创建一个全局变量并将每个结果附加到它。然后保存。
var fs = require('fs'); // better to require it once
var results = [];
// ... some code
casper.then(function(){
results.push(result);
fs.write('results.json', JSON.stringify(results));
this.echo(JSON.stringify(results, undefined, 4));
casper.then(getNextPage);
});