PhantomJS中解析JSON平面文件的问题(请不要jquery,原始javascript)
Issue with parsing JSON flat file in PhantomJS (NO jquery, raw javascript please)
所以问题就在这里。我有一个直接从mongodb集合导出的json平面文件。我正试图让我的phantomjs应用程序读取并解析MongoDB中的平面文件,并将其转换为供phantomjs解析的对象。由于某些原因,我无法正常解析JSON字符串。
(注意:没有jQuery解决方案。这需要原始javascript)
这是我从mongodb得到的平面文件。看起来不错:
{ "host" : "www.myfoxphilly.com", "path" : "/category/233430/entertainment", "created_at" : { "$date" : 1375199393295 }, "_id" : { "$oid" : "51f7e0a1dc12a13510000002" } }{ "host" : "www.news9.com", "path" : "/category/112032/news", "created_at" : { "$date" : 1375285798173 }, "_id" : { "$oid" : "51f9322668ee1e660c000001" } }{ "host" : "www.myfoxphilly.com", "path" : "/category/233430/entertainment", "created_at" : { "$date" : 1375285823602 }, "_id" : { "$oid" : "51f9323f68ee1e660c000002" } }
以下是试图解析上述JSON平面文件的配置文件
var fs = require('fs');
var data = fs.read('configData.json');
var newdata = JSON.stringify(data);
var dataobj = eval("["+newdata+"]");
console.log(typeof(newdata));
exports.tests = dataobj;
// Sample object (works fine like this):[{path:'/category/112043/sports' ,host:'www.newson6.com'}];
exports.getFileName = function(test,local) {
return 'results/' + test.host.replace(/'./g,'-').replace(/':[0-9]+/,'').replace('-com','').replace('www-','') + test.path.replace(/'//g,'-').replace(/'?clienttype=/g, "clienttype") + ((local) ? '-locl' : '-prod')
}
所以当我运行phantom时,我没有得到任何数据。JSON变成了一个单独的对象,而不是我在注释部分中的对象示例。
如果我只是替换JS公共库平面文件导入并使"数据"成为字符串,它就可以正常工作,如下所示:
var data = '{"host" : "www.myfoxphilly.com", "path" : "/some/path/233409"}';
当我将JSON作为字符串导入时,js公共库文件导入是否存在某种问题?请帮忙。
再一次,没有jQuery,我会毫不犹豫地投票给你。I<3jQuery,但你们需要意识到什么时候使用它是合适的(即基于浏览器的js)。
天哪!您使用了eval
…:P我很惊讶这个问题还没有被否决5次。
关于真实的、极好的问题。
如果@DCoder真的发布了答案,那么您的问题就是JSON。"mongodb的平面文件"不一定是有效的JSON。此外,为了使其有效,您需要首先解析字符串:
-
用方括号包裹
-
确保从mongo导出的每个数据行后面都有一个逗号。
-
说真的,
eval
?对转换后的字符串使用JSON.parse两次。
这应该能解决问题。其他一切看起来都很干净。
(..eval
..我简直不敢相信这个擦洗)
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用jQuery从原始页面内容创建iframe
- JQuery:使用clone()生成的元素不采用原始的事件属性
- 从jquery对话框恢复原始数据,脚本不起作用
- jQuery 获取原始文本(未转义),以便通过下划线模板进一步解析
- jQuery's clone()函数扰乱了原始元素'的属性
- 将jQuery$(this)转换为原始元素
- jQuery可排序停止丢弃原始父级
- 如何使用jQuery获取原始状态文本
- 对API的Spring RestTemplate调用有效,但由于相同的原始策略,jQuery失败
- 当原始内容通过jQuery更新时,我如何告诉PageDown更新其预览
- jquery悬停后恢复到原始图像是更好的方式
- jQuery.get()访问控制只允许某些资源出现原始错误
- jquery下拉菜单修改所选文本,但在后续单击时显示先前所选文本的原始值
- 如何使用 jquery 将编辑后的行替换为其在表中的原始显示
- jQuery 在缓存中预加载图像并在其他函数继续之前获取原始图像大小
- 我制作了自己的jquery选项卡版本,但我需要外部链接来显示选项卡内容和样式原始导航
- 使用 jquery 的 animate 后无法将文本区域大小调整回原始大小
- 在鼠标退出后,JQuery 无法将某些内容返回到其原始位置
- 原始HTML样式与jQuery生成的具有相同结构的HTML不同