当前位置: 首页 > 实用文档 > 教学设计 > jason在线解析

jason在线解析

2016-03-15 18:29:20 成考报名 来源:http://www.chinazhaokao.com 浏览:

导读: jason在线解析(共2篇)JSON格式及读写讲解JSON格式及读写讲解JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的...

以下是中国招生考试网www.chinazhaokao.com为大家整理的《jason在线解析》,希望大家能够喜欢!更多资源请搜索成考报名频道与你分享!

篇一:《JSON格式及读写讲解》

JSON格式及读写讲解

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。 基础结构

JSON建构有两种结构:[1]

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构

1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

经过对象、数组2种结构就可以组合成复杂的数据结构了。

基础示例

简单地说[1],JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

名称 / 值对

按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

{ "firstName": "Brett" }

这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间: firstName=Brett

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创

建包含多个"名称 / 值对"的 记录,比如:

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

表示数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在XML中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ "people": [

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

]}

这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录): { "programmers": [

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

],

"authors": [

{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

],

"musicians": [

{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

] }

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

格式应用

掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。 赋值给变量

例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

[2] var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

],

"authors": [

{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

],

"musicians": [

{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

] }

这非常简单;现在 people包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。

访问数据

尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

people.programmers[0].lastName;

注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。

结果是字符串值 “McLaughlin”。

下面是使用同一变量的几个示例。

people.authors[1].genre // Value is "fantasy"

people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one

people.programmers[2].firstName // Value is "Elliotte"jason在线解析

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改数据

正如可以用点号和方括号访问数据,也可以按照同样的方式轻松地修改数据:

people.musicians[1].lastName = "Rachmaninov";

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

换回字符串

当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString();

这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。

更重要的是,可以将 任何JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。

和XML的比较

◆可读性

JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

◆可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。

◆编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

◆解码难度

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。

凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。

◆实例比较

XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。

用XML表示中国部分省市数据如下:

<?xml version="1.0" encoding="utf-8"?>

<country>

<name>中国</name>

<province>

<name>黑龙江</name>

<cities>

<city>哈尔滨</city>

<city>大庆</city>

篇二:《分析找到在线歌曲下载地址》

关于嗅探网页地址的软件N多,使用也非常方便,比如傲游的“网页嗅探器”功能就非常好用。

这篇文章只是简单介绍一下如何手动分析国内知名在线试听网“一听音

乐”的歌曲的真实下载地址。

这篇文章启发于“看雪”论坛里的某篇类似文章,有兴趣的可以去查询对比。

分析依据:希望能通过在线播放时的地址来分析出该曲目的所有其它信息,包括:歌曲名,歌手,专辑,下载地址,甚至歌词等。

分析过程:

第一步:观察播放时的地址格式,留间有用信息。

播放时有两种状态,要么单曲播放,要么多曲目连播,分别是以下两种格式,做个例子。 单曲播放:/player/9b/player_151572.html

多曲连播:/p_144658_14 ... _144291_144283.html

很明显,URL后面的数字是曲目的身份标识ID。希望能通过这些ID来获得对应曲目的所有信息。

第二步:通过ID获得曲目信息。这是最关键的一步.

曲目的信息估计是保存在网站数据库或其它文件,不会直接提供一个绝对地址在源代码里,于是尝试分析这个网站如何分析ID对应

jason在线解析

曲目信息的原理。这里就提示我们把目光锁定在提交播放地址时网站会调用哪些 javascript 脚本去读取信息了。

于是在播放器的页面上点右键“查看源文件”,Ctrl+F 搜索 '.js'后缀。可查得有几个 .js 被调用:

1.

2.

3.

4.

5. <script type="text/javascript" src="/v5/r4/js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="/v5/r4/player/js/jquery.player.js"></script> <script type="text/javascript" src="/v5/r4/player/js/lightbox.js"></script> <script type="text/javascript" src="/v5/r4/player/js/share.js"></script> <script type='text/javascript' src='/v5/js/m.js'></script>

复制代码

一个一个下载下来看看。(方法是提交 加上scr后面引号里的串)

经过查看,发现 /v5/r4/player/js/jquery.player.js 里面有一些好东西。

还是用 记事本打开 然后复制到 word 里容易看一些。居然有28页那么长,那不看死

人???

耐心点可以看到一些有用东西: 虽然根本没有学过 JavaScript 语言,却能大体上看得懂这

个js在做些什么。

留意有用东西:

Word里的第1页:

1.

2.

3. },mt = [''

复制代码

第2页:

1.

2.

3.

4.

5. a.fields={'song-id':0,'singer-name':1, 'singer-url':2,'song-name':3, 'song-url':4,'album-name':5, 'album-url':6,'song-media':7, 'album-cover':8};//这不是曲目的所有信息的字段名吗??

复制代码

第10页:

1.

2.

3.

4. a.datasources = { 'history':function(){ return '/json2010_'+yiting.ed.get().join('_')+'.js'; //曲目的信息保存在此,最最重要的家伙。 },

复制代码

第26页

1. $('#jlrc_url').attr('src','/lrc'+b+'.html');//类

似于歌词的下载地址

复制代码

„„

当然可能还有其它有用信息,有兴趣自己去找。

关键定位无疑在第10页那个保存曲目信息的.js地址了。

即 加上 /json2010_ 加上曲目的ID 再加上 .jsjason在线解析

比如前面提到我的比较喜欢的BEYOND早期第一首曲:

单曲播放:/player/9b/player_151572.html

ID是 151572

则保存其曲目信息的地址在:/json2010_151572.js

提交后得到返回信息如下:

window.callback([["151572","Beyond","http:\/\/\/singer\/70\/singer_1751.html","Dead Romance

(Part\u2161)","http:\/\/\/player\/9b\/player_151572.html","\u518d\u89c1\u7406\u60f3","http:\/\/\/album\/65\/album_11220.html","\/zzzzfuck520

\/2007eMay\/05h_Beyond\/5.wma","http:\/\/img.1ting.com\/images\/special\/38\/s150_59d644e6ddaf593407239013271eb008.jpg"]])

一切尽在意料当中。

整理得到:

第1个参数是:歌曲ID

第2个参数是:歌手名

第3个参数是:歌手介绍地址

第4个参数是:歌曲名

第5个参数是:播放页面地址

第6个参数是:专辑名

第7个参数是:专辑地址

第8个参数是:歌曲下载地址

第9个参数是:专辑封面图

第三步:处理曲目信息得到最终想到的数据:

要得到这个地址的真实下载地址很简单的事了。提交“基址”+ 第8个参数。(当然要把\号去掉,否则无法解析)

比如上述曲目的真实地址为:

放到迅雷里马上可以下载了。OK

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

网站的曲目查询过程小结如下:

1、提交播放地址(含ID号的URL)

2、通过"/v5/r4/player/js/jquery.player.js"获得曲目的信息文

件 /json2010_ ID.js,以及其它歌词等信息。

3、把相关信息提交播放器进行播放。

当然上述只是一个非常粗略的过程,其中还有一些加密,查询过程,次要,略过。

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

知道了原理,不妨用 Delphi 写一个下载地址刺探工具。详细实现过程如下,看注释。 1.

2.

3.

4.

5.

6. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

8.

9.

10.

11.

12.

13.

14.jason在线解析

15.jason在线解析

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50. type TForm1 = class(TForm) Button1: TButton; EditURL: TEdit; LV: TListView; SB: TStatusBar; Label1: TLabel; Pop: TPopupMenu; mTTPlayer: TMenuItem; mIE: TMenuItem; mCopySongURL: TMenuItem; N1: TMenuItem; mMediaPlay1: TMenuItem; N2: TMenuItem; mCopyAll: TMenuItem; procedure Button1Click(Sender: TObject); procedure LVMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure mCopySongURLClick(Sender: TObject); procedure mIEClick(Sender: TObject); procedure mTTPlayerClick(Sender: TObject); procedure mMediaPlay1Click(Sender: TObject); procedure mCopyAllClick(Sender: TObject); private { Private declarations } function GetSongInfoJsURL(ID: string): string; //过滤'\'号 function DelSlash(Str: string): string; public { Public declarations } end; var Form1: TForm1; iINDEX: Integer; //当前被选中的条目。 implementation {$R *.dfm} {读取指定URL的源代码内容}

52.

53.

54.

55.

56.

57.

58.

59.

60.

61.

62.

63.

64.

65.

66.

67.

68.

69.

70.

71.

72.

73.

74.

75.

76.

77.

78.

79.

80.

81.

82.

83.

84.

85.

86.

87.

88.

89.

90.

91. var Session, HttpFile: HINTERNET; szSizeBuffer: Pointer; dwLengthSizeBuffer: DWord; dwReserved: DWord; dwFileSize: DWord; dwBytesRead: DWord; Contents: PChar; begin Session := InternetOpen('', 0, nil, nil, 0); ///初始化WININET.DLL HttpFile := InternetOpenUrl(Session, PChar(Url), nil, 0, 0, 0); //连接服务器并读取数据 dwLengthSizeBuffer := 1024; HttpQueryInfo(HttpFile, 5, szSizeBuffer, dwLengthSizeBuffer, dwReserved); //得到页面信息 GetMem(Contents, dwFileSize); //开辟内存 InternetReadFile(HttpFile, Contents, dwFileSize, dwBytesRead); //读取文件 InternetCloseHandle(HttpFile); //释放HttpFile资源 InternetCloseHandle(Session); //释放Session资源 Result := StrPas(Contents); FreeMem(Contents); //释放 end; //核心过程,通过播放地址来读取曲目相关的信息以及下载地址 procedure TForm1.Button1Click(Sender: TObject); var PlayURL: string; AChar: Char; I, J, K: Integer; index: Integer; //当前处理的曲目序号 iLen: Integer; //播放URL的长度、 ID: string; strSongInfo: string; //歌曲所有信息字符串 iPos: array[1..18] of Integer; //保存strSongInfo中含有"号的位置 。 strSong, strAlbum, strSinger, strSongURL: string; begin Button1.Enabled := False; PlayURL := EditURL.Text; iLen := Length(PlayURL); if iLen <= 0 then Exit; if Pos('', PlayURL) <= 0 then begin

以上就是中国招生考试网http://www.chinazhaokao.com/带给大家的精彩成考报名资源。想要了解更多《jason在线解析》的朋友可以持续关注中国招生考试网,我们将会为你奉上最全最新鲜的成考报名内容哦! 中国招生考试网,因你而精彩。

相关热词搜索:爬虫解析jason jason解析工具

最新推荐成考报名

更多
1、“jason在线解析”由中国招生考试网网友提供,版权所有,转载请注明出处。
2、欢迎参与中国招生考试网投稿,获积分奖励,兑换精美礼品。
3、"jason在线解析" 地址:http://www.chinazhaokao.com/jiaoxuesheji/300695.html,复制分享给你身边的朋友!
4、文章来源互联网,如有侵权,请及时联系我们,我们将在24小时内处理!