如何通过js 获取json数据

如何通过js 获取json数据,第1张

==========================================

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里面的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9660119.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存