使用PhantomJS获取JSON页面内容
我想知道如何在phantomjs中解析JSON。任何页面内容都包含在html中(使用PhantomJS获取JSON页面内容,json,phantomjs,Json,Phantomjs,我想知道如何在phantomjs中解析JSON。任何页面内容都包含在html中({JSON string})。是否有一个选项可以删除封闭的标记或要求使用不同的内容类型作为“application/json”?如果没有,最好的解析方法是什么。在包含includeJS jQuery之后是否使用jQuery?以下是我所做的: var jsonObject = page.evaluate(function() { return JSON.parse(page.plainText); }); 然后,
{JSON string}
)。是否有一个选项可以删除封闭的标记或要求使用不同的内容类型作为“application/json”?如果没有,最好的解析方法是什么。在包含includeJS jQuery之后是否使用jQuery?以下是我所做的:
var jsonObject = page.evaluate(function() {
return JSON.parse(page.plainText);
});
然后,您得到的obj是从该页面返回的JSON对象 正如已被接受的答案中所述,我建议使用
JSON.parse()
将JSON字符串转换为对象
例如,您的代码可能如下所示:
var page = require('webpage').create();
page.open('http://somejsonpage.com', function () {
var jsonSource = page.plainText;
var resultObject = JSON.parse(jsonSource);
phantom.exit();
});
由于您使用的是基于webkit浏览器构建的PhantomJS,因此您可以访问本机JSON库。无需使用page.evaluate,您只需在page对象上使用plainText属性即可
如果json数据包含html字符串,它们将在建议的
page.plainText
属性中被删除。obj为空。这段代码很好,可以记录JSON:page.open(encodeURI(url)、函数(status){if(status!==“success”){…}else{console.log(page.content);phantom.exit();}但不是这个:page.open(encodeURI(url)、函数(status){if(status!==“success”){…}else{var obj=page.evaluate(function(){return eval('('+document.body.innerText+');});console.log(obj)phantom.exit();page.evaluate仍然很神秘!eval不应该被丢弃吗?对于被否决的人来说,这是一种有效的方法。我知道jQuery对于JSON解析可能有点过火,但请礼貌地向我解释你的否决。谢谢。@CameronTinker为什么不使用本机javascript JSON.parse?为什么要包含一个不需要的库这个?我已经更新了这个答案,将jQuery作为一个依赖项删除。我只是尝试了一下,它没有从json中删除html字符串。无耻的插件:检查如何使用AWS Lambda运行phantomjs脚本!
var page = require('webpage').create();
page.open('http://somejsonpage.com', function () {
var jsonSource = page.plainText;
var resultObject = JSON.parse(jsonSource);
phantom.exit();
});