我编写的代码可以从一些网页中解析很多单词(innerHTML)。
我想直接将数据插入json文件..
这是我的js代码......
var words = [];
var casper = require('casper').create();
function getWords() {
var words = document.querySelectorAll('td.subject a');
return Array.prototype.map.call(words, function(e) {
return e.innerHTML;
});
}
casper.start('http://www.todayhumor.co.kr/board/list.php?table=bestofbest', function() {
words = this.evaluate(getWords);
});
for (var i=2; i <=5; i++) {
casper.thenOpen('http://www.todayhumor.co.kr/board/list.php?table=bestofbest&page='+i, function() {
words = words.concat(this.evaluate(getWords));
});
}
casper.run(function() {
// echo results in some pretty fashion
this.echo(words.length + ' links found:').exit();
this.echo(words.join('\n')).exit();
});
和
我通过这样的终端运行这段代码!
username@wow:~/workspace/app/assets/javascripts $ casperjs application.js
,结果是(例如)
150 words found:
apple
banana
melon
kiwi
citrus
watermelon
passionfruit
mango
orange
...
所以我想在&#34; word&#34;中插入这些数据我的json文件的部分(以下json的示例代码)
并自动添加其他列(&#34;键入&#34;:&#34;水果&#34;和&#34;拼写&#34; :)
{ "my_initial_words": [
{
"type": "fruit",
"word": "apple",
"spell": "ap"
},
{
"type": "fruit",
"word": "banana",
"spell": "ba"
},
{
"type": "fruit",
"word": "melon",
"spell": "me"
}
]
}
----------------------------------------------------------------------------
感谢您添加更多答案! 但我无法抓住我应该把这些代码放在哪里
你能再一次告诉我......你给我的代码执行了什么&#34;将结果保存到JSON文件?&#34;因为我必须在我的seeds.rb
文件中读取json文件(makeyourap.json)
require 'json'
file = File.open(Rails.root.join('db','makeyourap.json'))
contents = file.read
json = ActiveSupport::JSON.decode(contents)["my_initial_words"]
答案 0 :(得分:2)
那么,这样的事情呢?
function makeTypeObject(name, type) {
return {
name: name,
type: type,
spell: name.substr(0,2)
};
}
var wordDesc = words.map(function (word) {
return makeTypeObject(word, "fruit");
});
var finalObject = {
my_initial_words: wordDesc
};
var jsonString = JSON.stringify(finalObject);
// if you want prettyprint, try JSON.stringify(finalObject, null, "\t");
我希望这会有所帮助。
答案 1 :(得分:1)
如果您想要一个可以读写的文件,附加内容,您可以这样做:
var fs = require('fs');
var FILENAME = 'makeyourap.json';
function add_new_fruits(fruits) {
var data;
if ( fs.isFile(FILENAME) ) {
data = fs.read(FILENAME);
} else {
data = JSON.stringify({'my_initial_words' : [] });
}
var json = JSON.parse(data);
fruits.forEach(function(word) {
json.my_initial_words.push({"type": "fruit",
"name": word,
"spell": word.slice(0,2)});
});
data = JSON.stringify(json, null, '\t');
fs.write(FILENAME, data, "w");
}
使用此代替较旧的this.echo
。只需将其称为
casperjs application.js
这可以从文件中读取对象,也可以在文件不存在时创建。然后,它从新的水果(包括重复项)中追加每个新对象,并将其写回FILENAME
。
首先,您要创建一个只有参数my_initial_words
的对象,其值如上所述。
您可以通过
创建一个功能function createFinal(wordArray) {
var out = [];
wordArray.forEach(function(word) {
out.push({"type": "fruit", "name": word, "spell": word.slice(0,2)});
});
return out;
}
创建数组。然后,通过
创建对象var my_object = { "my_initial_words": createFinal(words) };
Javascript有built-in JSON
-object。使用像
var my_object = { "my_initial_words": ...
如上所述,使用
JSON.stringify(my_object)
获取要写的JSON表示。
之前,你有
this.echo(words.join('\n')).exit();
给了你基本的清单。使用this.echo
,尝试将其替换为
var my_object = { "my_initial_words": createFinal(words) };
this.echo(JSON.stringify(my_object)).exit();
打印到标准输出。只需删除其他this.echo
行(找到150个字)并通过
casperjs application.js > makeyourap.json
如果您想在casperjs中写入文件,请查看write-results-into-a-file-using-casperjs。