集中数据格式:JSON和JSONP

文章简介:Ajax和WEB服务数据格式:JSON JSONP.

在之前的文章中我们讲到了早期的集中数据格式,XML,SOAP,HTML。现在,我们来看看JSON和JSONP。

JSON

JSON(JavaScript Object Notation)是Douglas Crockford提出的。他是一个轻量级的数据交换格式,基于JavaScript对象字面量。

我们可以将之前的XML图书格式的文件内容转换成下面的JSON格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[
   {
       title:
						"The Principles of Beautiful Web Design, 2nd Edition",
       url:
						"http://www.sitepoint.com/books/design2/",
       author:
						"Jason Beaird",
       publisher:
						"SitePoint",
       price:
						{
           currency:
						"USD",
           amount:
						39.95
        }
    },
    {
        title:
						"jQuery: Novice to Ninja",
        url:
						"http://www.sitepoint.com/books/jquery1/",
        author:
						"JEarle Castledine & Craig Sharkie",
        publisher:
						"SitePoint",
        price:
						{
            currency:
						"USD",
            amount:
						29.95
        }
    },
    {
        title:
						"Build Your Own Database Driven Website",
        url:
						"http://www.sitepoint.com/books/phpmysql4/",
        author:
						"Kevin Yank",
        publisher:
						"SitePoint",
        price:
						{
            currency:
						"USD",
            amount:
						39.95
        }
    }
]

这是一个通过对象来表示书的一种方式,并且有title、url、author、publisher、和price等信息。price是一个子对象,并且他包含货币类型和价格。

在JavaScript中很容易处理JSON。你可以使用浏览器原生的JSON.parse方法或者Douglas Crockford的JSON-js库。就算这些都不能用,你也可以使用javaScript的eval方法。不需要再写额外的处理数据的方法:

1
2
3
4
var json = xhr.responseText;
var book = JSON.parse(json);
alert(book[0].title);
						//first book title
alert(book[1].url);
						//second book URL

使用JSON的优点在于:

  • 比XML轻了很多,没有那么多冗余的东西
  • JSON也是具有很好的可读性的,但是通常返回的都是压缩过后的。不像XML这样的浏览器可以直接显示,浏览器对于JSON的格式化的显示就需要借助一些插件了
  • 在JavaScript中处理JSON很简单
  • 其他语言例如PHP对于JSON的支持也不错

JSON也有一些劣势:

  • JSON在服务端语言的支持不像XML那么广泛,不过JSON.org上提供很多语言的库
  • 如果你使用eval()来解析的话,会容易出现安全问题

尽管如此,JSON的优点还是很明显的。他是Ajax数据交互的很理想的数据格式。

JSONP (JSON-p)

如果你使用XMLHttpRequest来调用JSON的web服务,返回的数据可以通过JSON.parse()或者eval()来处理。你也可以使用Ajax组件来做脚本的插入,例如,将远程加载的脚本插入在DOM节点中,通过script标签调用:

1
2
3
var script = document.createElement("script");
script.src
						=
						"http://webservice.com/?a=1&b=2";
document.getElementsByTagName("head")[0].appendChild(script);

跟XMLHttpRequest不同,插入script标签可以在不同源的情况下获取其他服务的数据。这对于流量分析、书签工具、小插件、广告系统来说是很理想的选择。

不过,返回的JSON数据通常都是当做本地的代码立即执行。也不会赋值给变量,所以后面就再访问不到了。不过这个问题我们可以通过给网络服务传递一个callback参数来进行回调:

1
2
3
var script = document.createElement("script");
script.src
						=
						"http://webservice.com/?a=1&b=2&callback=MyDataHandler";
document.getElementsByTagName("head")[0].appendChild(script);

这时候,网络服务通常会返回一个包含在一个回调函数中的JSON数据,这就是JSONP,或者“JSON with padding”,看看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
MyDataHandler([
    {
        title:
						"The Principles of Beautiful Web Design, 2nd Edition",
        url:
						"http://www.sitepoint.com/books/design2/",
        author:
						"Jason Beaird",
        publisher:
						"SitePoint",
        price:
						{
            currency:
						"USD",
            amount:
						39.95
         }
     }
     ...
]);

在JSON对象下载完毕之后,作为参数传递给了MyDataHandler()方法。

JSON和JSONP已经是现在最流行的异步交互的数据格式了。但是在压缩传输数据大小的方面还是可以再研究的。RockUX会在后面讲到关于自定义数据返回。

看看这一系列其他的文章:

  • Ajax和WEB服务数据格式:XML SOAP HTML
  • Ajax和WEB服务数据格式:自定义返回格式

转载请注明:
作者:RockUX–WEB前端
出自:Ajax和WEB服务数据格式:JSON JSONP

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json
, 数据
, jsonp
, script
, json数据
, 格式
, title
, 网络编程json
, #jason解析
, #json数据压缩
, JSON格式数据
, JSON格式
, json格式化
jsonp获取json数据
,以便于您获取更多的相关知识。

时间: 2024-10-04 12:45:49

集中数据格式:JSON和JSONP的相关文章

说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX.  说到AJAX就会不可避免的面临两个

说说JSON和JSONP

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决. 但到目前为止最被推崇或者说首选的方案还是用JSON来传数据,靠JSONP来跨域.而这就是本文将要讲述的内容.  JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交

浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用_jquery

JSON和JSONP   JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在浏览器和服务器之间交换信息.   JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON).   JSON是一种数据格式,JSONP是一种数据调用方式.   复制代码 代码如下:  //JSON  {  "name": "sb"  } 复制代码 代码如下:  //JSONP  callback({

Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别_javascript技巧

前言 第一次听说jsonp,其实早在2年之前.当时在做一个活动页面的抽奖模块,要从服务端get一个概率,当时什么都不懂,同事说用ajax,我就用ajax,同事说dataType改成jsonp,我就改成jsonp.于是乎活动页面做完了,以后也没有碰到过jsonp,在这期间我一直以为jsonp跟ajax息息相关,是xhr的一种特殊的跨域形式...直到一个月前的一次面试,问到jsonp我被虐成狗,才决定看下jsonp,好吧,原来jsonp也不是很难. 为什么要用jsonp? 相信大家对跨域一定不陌生,

json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)

一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展.简单地讲,json其实就是JavaScript中的对象(Object)和数组(Array,其实也是对象)这倆好基友在那儿你嵌我我嵌你地套上n多层,以此模拟出许多复杂的数据结构. json易于人阅读和编写,也易于机器解析和生成,相对网络传输速率较高,功能型网站前后端往往要频繁大量交换数据,而json

浅析json与jsonp区别及通过ajax获得json数据后格式的转换_AJAX相关

 有关json与jsonp的区别(json才是目的,jsonp只是手段)介绍如下所示: 一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展.简单地讲,json其实就是JavaScript中的对象(Object)和数组(Array,其实也是对象)这倆好基友在那儿你嵌我我嵌你地套上n多层,以此模拟出许多复杂的数据结构. json易于人阅读和编写,也易于

关于JSON与JSONP简单总结_javascript技巧

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

JSON 和 JSONP

本文转载:http://www.cnblogs.com/shanyou/archive/2009/12/13/1623163.html JSON 和 JSONP  浏览器安全模型规定,XMLHttpRequest.框架(frame)等只能在一个域中通信.从安全角度考虑,这个规定很合理:但是,也确实给分布式(面向服务.混搭等等本周提到的概念)Web开发带来了麻烦.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误. 源策略阻止

Json和Jsonp理论实例代码详解_基础知识

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