我有一个从抓取的网站数据创建对象的功能。对象看起来像这样:
{
name: 'Object Name',
baseURL: 'http://xyz123.com',
mainImg_select: '#item_image a',
mainImg_ref: 'href',
moreImg_select: '.extra_images',
moreImg_ref: 'href',
one_brand: '',
urls: [],
categories:
[ { name: 'Cat 1',
url: 'http://xyz123.com/category1' },
{ name: 'Cat 2',
url: 'http://xyz123.com/category2' },
{ name: 'Cat 3',
url: 'http://xyz123.com/category3' }
]
}
我通过一些使用request
和cheerio
模块的函数运行它。 request
函数以某种方式删除了我的对象'categories
属性;在记录对象时,我看到"categories: undefined"
(因此该属性仍然存在,只删除其内容。
真正奇怪的是,当我使用存储在由我的脚本创建的变量中的对象时,这种情况才会发生。如果我创建了对象,请将其记录下来,然后将其直接复制并粘贴到代码中(如上所述var object123 = {stuff goes here}
除外),然后我的Node脚本运行正常。
PrepJSON
是一个将JSON文件转换为对象的类。为了避免这成为一个巨大的代码墙,我在这里粘贴它:http://pastebin.com/Tgx0nnmR
唯一的区别是,我在prepJSON
函数中使用了一个返回的对象,在另一个我是console.logging该对象,运行该函数,复制日志,将其放入变量 - 然后神奇地说脚本可以工作。
脚本不会触及对象的其余部分 - 只有存储对象数组的类别。为了完整起见,以下是在prepJSON中创建object.categories
的方法。这是脚本触及它们的唯一时间:
storeCats.categories = (function(){
$('.view-Departments .field-content a').each(function(index){
storeCats.categories.push({'name': $(this).text(), 'url': $(this).attr('href')});
if(index == $('.view-Departments .field-content a').length -1) {callback(null);}
})}
)();