json使用方法




什么是JSON,为什么我会使用它? (11)

JSON和常规语法的区别如下(在Javascript中)

常规

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","[email protected]");

用JSON

如果我们使用JSON,我们可以用不同的方式定义为

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

我们必须记住的重要一点是,如果我们必须在不使用JSON方法的情况下构建“Employee”类或模态为100个元素,则必须在创建类时解析所有内容。 但是对于JSON,我们只能在定义了类的新对象时才可以定义内联对象。

所以下面这行代码是用JSON做事情的方式(只是一种简单的定义事物的方式)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

我查看了维基百科,并使用Google搜索并阅读了官方文档,但是我仍然没有明白JSON是什么,以及为什么要使用它。

我一直在使用PHP,MySQL和Javascript / HTML构建应用程序,如果JSON可以做些事情来让我的生活更轻松,或者我的代码更好,或者我的用户界面更好,那么我想知道它。 有人能给我一个简洁的解释吗?


JSON是JavaScript对象表示法。 与XML相比,它是跨网络连接传输多组数据的更紧凑的方式。 我建议将JSON用于任何类似AJAX的应用程序,否则XML将成为“推荐”选项。 XML的冗长度会增加下载时间并增加带宽消耗($$$)。 您可以使用JSON完成相同的效果,其标记几乎专用于数据本身,而不是基础结构。


JSON(JavaScript对象表示法)是用于数据交换/传输的轻量级数据格式。 它在JavaScript中的关键值对中。 REST API广泛用于从服务器到客户端的数据传输。 现在很多社交媒体网站都在使用这个。 尽管在数据类型方面我没有看到像XML那样健壮。 XML具有非常丰富的数据类型和XSD。 JSON在这方面有点欠缺。

对于相同数量的字符串数据,JSON将比XML更轻,因为XML具有所有打开和关闭标签等。


JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。 它基于JavaScript语言的子集(对象使用JavaScript构建的方式)。 正如在MDN中所述 ,一些JavaScript不是JSON,有些JSON不是JavaScript。

使用这个地方的一个例子是Web服务响应。 在过去的日子里,Web服务使用XML作为传输数据的主要数据格式,但自JSON出现以来( JSON格式由Douglas Crockford在RFC 4627中指定 ),它一直是首选格式,因为它更多轻量级

您可以在官方JSON网站上找到更多信息。

JSON建立在两个结构上:

  • 名称/值对的集合。 在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组。
  • 有序的值列表。 在大多数语言中,这是作为数组,矢量,列表或序列实现的。

JSON结构













以下是JSON数据的一个例子:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JavaScript中的JSON

JSON(使用Javascript)是一个字符串!

人们通常假设所有的Javascript对象都是JSON,而JSON是一个Javascript对象。 这是不正确的。

在Javascript中var x = {x:y} 不是JSON ,这是一个Javascript对象 。 两者不是一回事。 JSON等价物(以Javascript语言表示)将是var x = '{"x":"y"}'x是一个string类型的对象,它本身并不是一个对象。 要把它变成一个完全成熟的Javascript对象,你必须先解析它, var x = JSON.parse('{"x":"y"}');x现在是一个对象,但这不再是JSON。

请参阅Javascript对象与JSON

在使用JSON和JavaScript时,可能会试图使用eval函数来评估回调中返回的结果,但由于在JSON中有两个字符(U + 2028和U + 2029)有效, JavaScript(阅读更多here )。

因此,在评估之前,必须始终尝试使用Crockford的脚本来检查有效的JSON。 链接到脚本解释在here找到,这里是直接链接到js文件。 现在,每个主流浏览器都有自己的实现 。

有关如何使用JSON解析器(使用上述代码段中的json)的示例:

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

JSON解析器还提供了另一种非常有用的方法stringify 。 该方法接受一个JavaScript对象作为参数,并返回一个JSON格式的字符串。 这对于您想要将数据发送回服务器很有用

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

上述两种方法( parsestringify )也会获得第二个参数,这是一个函数,它将针对最终结果的每个级别上的每个键和值调用,并且每个值将被您输入函数的结果替换。 (更多关于here

顺便说一句,对于那些认为JSON仅适用于JavaScript的人,请查看这篇文章解释并确认。

参考


我喜欢JSON,主要是因为它非常简洁 。 对于可以被压缩的网页内容,这不一定是个大问题(因此为什么x html是如此受欢迎)。 但有些情况下这可能是有益的。

例如,对于一个项目,我传输需要序列化并通过XMPP传输的信息。 由于大多数服务器会限制您可以在一条消息中传输的数据量,因此我发现使用JSON而非明显的替代方法XML很有帮助。

作为额外的好处,如果您熟悉Python或Javascript,那么您已经非常了解JSON,并且可以在不需要太多培训的情况下对其进行解释。


什么是JSON?

JSON是JavaScript对象表示法的缩写,是一种以有组织,易于访问的方式存储信息的方法。 简而言之,它为我们提供了一个可读的数据集合,我们可以以真正合乎逻辑的方式访问这些数据。

存储JSON数据

作为一个简单的例子,关于我的信息可能用JSON编写如下:

var jason = {
"age" : "24",
"hometown" : "Missoula, MT",
"gender" : "male"
};

这创建了一个我们使用变量jason访问的对象。 通过将变量的值包含在花括号中,我们表明该值是一个对象。 在对象内部,我们可以使用“name”:“value”配对声明任意数量的属性,用逗号分隔。 要访问jason中存储的信息,我们可以简单地引用我们需要的财产的名称。 例如,要访问关于我的信息,我们可以使用以下代码片段:

document.write('Jason is ' jason.age); // Output: Jason is 24
document.write('Jason is a ' jason.gender); // Output: Jason is a male

将JSON数据存储在数组中

一个稍微复杂的例子涉及将两个人存储在一个变量中。 为此,我们将多个对象放在方括号中,表示一个数组。 例如,如果我需要在一个变量中包含关于我和我的兄弟的信息,我可以使用以下内容:

var family = [{
    "name" : "Jason",
    "age" : "24",
    "gender" : "male"
},
{
    "name" : "Kyle",
    "age" : "21",
    "gender" : "male"
}];

要访问这些信息,我们需要访问我们希望访问的人的数组索引。 例如,我们将使用下面的代码段来访问存储在家族中的信息:

document.write(family[1].name); // Output: Kyle
document.write(family[0].age); // Output: 24

注意:如果需要循环存储的信息,这是有益的,因为它适用于具有自动递增值的for循环。

嵌套JSON数据

将多个人存储在变量中的另一种方法是嵌套对象。 为此,我们将创建类似于以下内容的内容:

var family = {
    "jason" : {
        "name" : "Jason Lengstorf",
        "age" : "24",
        "gender" : "male"
    },
    "kyle" : {
        "name" : "Kyle Lengstorf",
        "age" : "21",
        "gender" : "male"
    }
}

访问嵌套对象中的信息有点容易理解; 要访问对象中的信息,我们将使用以下片段:

document.write(family.jason.name); // Output: Jason Lengstorf
document.write(family.kyle.age); // Output: 21
document.write(family.jason.gender); // Output: male

嵌套的JSON和数组可以根据需要进行组合,以根据需要存储尽可能多的数据。

为什么JSON重要?

随着AJAX站点的兴起,站点能够快速异步加载数据或在不延迟页面渲染的背景下变得越来越重要。 在我们的布局中切换某个元素的内容而不需要页面刷新会为我们的应用程序增加一个“哇”因子,更不用说为我们的用户增加了便利。 由于社交媒体的流行性和易用性,许多网站依赖于Twitter,Flickr等网站提供的内容。 这些网站提供的RSS提要很容易在服务器端导入和使用,但如果我们尝试使用AJAX加载它们,我们会遇到一个问题:我们只能加载RSS提要,如果我们从它托管在同一个域中。 试图通过jQuery的$ .ajax()方法加载我的Flickr帐户的RSS源会导致以下JavaScript错误:

[Exception... "Access to restricted URI denied" code: "1012" 
nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)" 
location: "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js Line: 19"]

JSON使我们能够克服跨域问题,因为我们可以使用名为JSONP的方法,该方法使用回调函数将JSON数据发送回我们的域。 正是这种能力使JSON非常有用,因为它打开了许多以前难以解决的难题。

我们如何将JSON加载到项目中?

将JSON数据加载到我们的Web应用程序中最简单的方法之一是使用jQuery库中提供的$ .ajax()方法。 根据提供数据的站点,检索数据的方便程度会有所不同,但一个简单示例可能如下所示:

$.ajax(
    type:'GET',
    url:"http://example.com/users/feeds/",
    data:"format=json&id=123",
    success:function(feed) {
        document.write(feed);
    },
    dataType:'jsonp'
);

常见的简短答案是:如果您使用AJAX发出数据请求,则可以轻松地将对象作为JSON字符串发送和返回。 Javascript的可用扩展支持对所有JavaScript类型的JSON()调用,以便在AJAX请求中将数据发送到服务器。 AJAX响应可以将对象作为JSON字符串返回,可以通过简单的eval调用将其转换为Javascript对象,例如,如果返回AJAX函数someAjaxFunctionCallReturningJson

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

你可以用Javascript编写

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON也可以用于Web服务有效载荷等,但它对于AJAX结果非常方便。


我们必须在大学里做一个项目,我们面临一个很大的问题,那就是所谓的同源政策。 编写其他的东西,它使得您的Javascript中的XMLHttpRequest方法无法向您的网站所在的域以外的域发出请求。

例如,如果您的网站位于www.example.com上,则无法向www.otherexample.com发送请求。 JSONRequest允许这样做,但如果该网站允许(例如,它具有以JSON返回消息的Web服务),您将获得JSON格式的结果。 这是你可以使用JSON的一个问题。

这里有一些实用的东西: Yahoo JSON


有时技术性是在没有要求的情况下给出的,虽然许多最受欢迎的答案都是精确的技术性和特定性的,但我个人认为它们不像维基百科中那样容易理解或简洁,或者在官方文件。

我喜欢想到JSON的方式就是这样 - 在不同语言的世界中的一种语言。 但是,JSON与其他语言的区别在于,“所有人”都会“说”JSON以及他们的“母语”。

用一个真实世界的例子,让我们假装我们有三个人。 一个人说伊格博作为他们的母语。 第二个人想与第一个人交流,然而,第一个人说约鲁巴语为他们的第一语言。

我们可以做什么?

值得庆幸的是,在我们的例子中,第三个人长大了说英语,但也恰好说伊博和约鲁巴都是第二语言,所以可以担任前两个人之间的中介。

在编程世界中,第一个“人”是Python,第二个“人”是Ruby,第三个“人”是JSON,他们恰好能够将Ruby“翻译”成Python,反之亦然! 现在很明显,这种类比并不完美,但作为双语人士,我相信这是一种查看JSON如何与其他编程语言交互的简单方法。


简而言之 - JSON是一种以这种方式序列化的方式,即它变成JavaScript代码。 在执行时(使用eval或其他方式),此代码将创建并返回一个JavaScript对象,其中包含您序列化的数据。 这是可用的,因为JavaScript允许以下语法:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

您可以将其用于多种目的。 首先,将数据从服务器后端传递到JavaScript代码是一种很好的方式。 因此,这在AJAX中经常使用。

您也可以将其用作独立的序列化机制,它比XML更简单并占用更少的空间。 有许多库允许您使用JSON序列化和反序列化各种编程语言的对象。


这很简单。 JSON代表Java Script Object Notation。 把它看作是使用XML在软件组件之间传输数据的替代方案。

例如,我最近编写了一堆返回JSON的Web服务,然后一些Javascript开发人员编写了代码,这些代码调用服务并使用以该格式返回的信息。





json