
==========================================
js 中读取JSON的方法探讨
js读取JSON的方法我接触到的有两种:
方法一:函数构造定义法返回
var strJSON = "{name:'json name'}";//得到的JSON
var obj = new Function("return" + strJSON)();//转换后的JSON对象
alert(objname);//json name
方法二:js中著名的eval函数
var strJSON = "{name:'json name'}";//得到的JSON
var obj = eval( "(" + strJSON + ")" );//转换后的JSON对象
alert(objname);//json name
第二种方法需要注意的是,对象表达式{'name':'json name'}必须用“()”扩住,否则
var strJSON = "{name:'json name'}";
var obj = eval(strJSON);
alert(objconstructor);//String 构造函数
alert(objname);//undefine
必须把对象表达式扩起来eval执行才能生成一个匿名对象!
假如你这个json对象用变量j表示
用下面代码
var t='', k=jstudentjson;//得到数组k
for(var i=0;i<klength;i++){
var m=k[i];
t+=['<tr><td>'+m['学号'],m['姓名'],m['性别'],m['班级']+'</td></tr>']join('</td><td>');
}
t='<table><tbody>'+t+'</tbody></table>';
//得到表格html代码t
var json = { contry:{ area:{ man:"12万", women:"10万" } } };
//方式一:使用eval解析
var obj = eval(json);
alert(objconstructor);
alert(objcontryareawomen);
//方式二:使用Funtion函数
var strJSON = "{name:'json name'}";//得到的JSON
var obj = new Function("return" + strJSON)();//转换后的JSON对象
alert(objname);//json name
alert(objconstructor);
//复杂一点的json数组数据的解析
var value1 = [{"c01":"1","c02":"2","c03":"3","c04":"4","c05":"5","c06":"6","c07":"7","c08":"8","c09":"9"}, {"c01":"2","c02":"4","c03":"5","c04":"2","c05":"8","c06":"11","c07":"21","c08":"1","c09":"12"}, {"c01":"5","c02":"1","c03":"4","c04":"11","c05":"9","c06":"8","c07":"1","c08":"8","c09":"2"}]; var obj1 = eval(value1);
alert(obj1[0]c01);
//复杂一点的json的另一种形式
var value2 = {"list":[ {"password":"1230","username":"coolcooldool"}, {"password":"thisis2","username":"okokok"}], "array":[{"password":"1230","username":"coolcooldool"},{"password":"thisis2","username":"okokok"}]};
var obj2 = eval(value2);
alert(obj2list[0]password);
由于spring security 默认的登录是key value表单登录形式 ,需要自定义filter来支持json格式登录
首先需要自定义一个filter来继承 UsernamePasswordAuthenticationFilter ,重写他的 attemptAuthentication 方法,具体内容和他大体一致,增加一个判断 requestgetContentType 是否是json格式,如果是的话就执行具体逻辑,如果不是则 return superattemptAuthentication(request, response); 交给父类来进行具体逻辑
需要注意的一点是判断 ContentType 的时候可以用 requestgetContentType()contains(MediaTypeAPPLICATION_JSON_VALUE) ,该常量的值的定义为 public static final String APPLICATION_JSON_VALUE = "application/json"; ,只要判断有这个字段就认为是json登录,省去后面是否有编码格式的判断
另外一点还要注意的是如果定义了 formLogin 的 loginProcessingUrl ,也要在自定的filter中定义 setFilterProcessesUrl ,否则是接收不到请求的,由于我看的教程没有设置过url,我被这一点坑了一个上午
但是这又带出了一个新问题, 不管是表单登录还是json登录的成功或者失败处理都是在自定filter的 AuthenticationSuccessHandler 和 AuthenticationFailureHandler 了 不知道是什么原因,是不是只能实现一个handler
一般是这样的,先将对象类型(在js中json就是一个对象),使用jsonjs(有些浏览器支持,有些需要引入)的方法:
JSONparse(jsonstr); //可以将json字符串转换成json对象
JSONstringify(jsonobj); //可以将json对象转换成json对符串
的第二个转换成字符串,然后把字符串当作一个参数的值再为其添加一个key然后以key/value的格式将数据传到后台。
之后后台使用requestgetParameter();的方式得到json数据。
方法一:直接抓取网页源码
优点:速度快。
缺点:1,正由于速度快,易被服务器端检测,可能会限制当前ip的抓取。对于这点,可以尝试使用ip代码解决。
2,如果你要抓取的数据,是在网页加载完后,js修改了网页元素,无法抓取。
3,遇到抓取一些大型网站,如果需要抓取如登录后的页面,可能需要破解服务器端帐号加密算法以及各种加密算法,及其考验技术性。
适用场景:网页完全静态化,并且你要抓取的数据在网页首次加载完成就加载出来了。涉及登录或者权限 *** 作的类似页面未做任何帐号加密或只做简单加密的。
当然,如果该网页你抓取的数据,是通过接口获得的json,那么,你就更幸福的,直接抓取json页面即可。
对于有登录的页面,我们如何拿到他的登录页之后的源码呢?
首先我要介绍一下,对于session保存帐号信息的情况下,服务器是如何确定该用户身份的。
首先,用户登录成功后,服务器端会将用户的当前会话信息保存到session中,每一个session有一个唯一标志sessionId。则用户访问这个页面,session被创建后,就会接收到服务器端传回的sessionId,并将其保存到cookie中,因此,我们可以用chrome浏览器打开检查项,查看当前页面的jsessionId。下次用户访问需要登录的页面时,用户发送的请求头会附上这个sessionId,服务器端通过这个sessionId就可以确定用户的身份。
这里,我搭建了一个简单的jsp登录页面,登录后的帐号信息保存在服务器端session中。
思路:1,登录。2,登录成功后获得cookie。3,将cookie放到请求头中,向登录页发送请求。
附上java版本的代码及python
java版:
这里以python为例,简单介绍一下如何通过python网络爬虫获取网站数据,主要分为静态网页数据的爬取和动态网页数据的爬取,实验环境win10+python36+pycharm50,主要内容如下:
静态网页数据
这里的数据都嵌套在网页源码中,所以直接requests网页源码进行解析就行,下面我简单介绍一下,这里以爬取糗事百科上的数据为例:
1首先,打开原网页,如下,这里假设要爬取的字段包括昵称、内容、好笑数和评论数:
接着查看网页源码,如下,可以看的出来,所有的数据都嵌套在网页中:
2然后针对以上网页结构,我们就可以直接编写爬虫代码,解析网页并提取出我们需要的数据了,测试代码如下,非常简单,主要用到requests+BeautifulSoup组合,其中requests用于获取网页源码,BeautifulSoup用于解析网页提取数据:
点击运行这个程序,效果如下,已经成功爬取了到我们需要的数据:
动态网页数据
这里的数据都没有在网页源码中(所以直接请求页面是获取不到任何数据的),大部分情况下都是存储在一个json文件中,只有在网页更新的时候,才会加载数据,下面我简单介绍一下这种方式,这里以爬取人人贷上面的数据为例:
1首先,打开原网页,如下,这里假设要爬取的数据包括年利率,借款标题,期限,金额和进度:
接着按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就可以找打动态加载的json文件,如下,也就是我们需要爬取的数据:
2然后就是根据这个json文件编写对应代码解析出我们需要的字段信息,测试代码如下,也非常简单,主要用到requests+json组合,其中requests用于请求json文件,json用于解析json文件提取数据:
点击运行这个程序,效果如下,已经成功爬取到我们需要的数据:
至此,我们就完成了利用python网络爬虫来获取网站数据。总的来说,整个过程非常简单,python内置了许多网络爬虫包和框架(scrapy等),可以快速获取网站数据,非常适合初学者学习和掌握,只要你有一定的爬虫基础,熟悉一下上面的流程和代码,很快就能掌握的,当然,你也可以使用现成的爬虫软件,像八爪鱼、后羿等也都可以,网上也有相关教程和资料,非常丰富,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
以上就是关于如何通过js 获取json数据全部的内容,包括:如何通过js 获取json数据、怎么样在js代码中获取json对象中的数据,我刚开始学到json对象这不太熟,求详细代码!加急我在线等!、js怎样读取json里面的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)