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

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

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


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

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

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

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(阅读更多这里)。

    因此,在评估之前,必须始终尝试使用Crockford的脚本来检查有效的JSON。 链接到脚本解释在这里找到,这里是直接链接到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 )也会获得第二个参数,这是一个函数,它将针对最终结果的每个级别上的每个键和值调用,并且每个值将被您输入函数的结果替换。 (更多关于这里)

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


    参考

  • JSON.org
  • 维基百科
  • Json在3分钟内(谢谢mson)
  • 在Yahoo!上使用JSON Web服务(谢谢gljivar)
  • JSON到CSV转换器
  • 替代JSON到CSV转换器
  • JSON Lint(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序列化和反序列化各种编程语言的对象。


    简而言之,它是传递数据的脚本符号。 从某种意义上说,它是XML的一种替代方案,它本身支持基本的数据类型,数组和关联数组(名称 - 值对,因为这就是它们所代表的对象)。

    该语法是JavaScript中使用的语法,JSON本身代表“JavaScript Object Notation”。 但是它已经变得可移植并且也被用于其他语言。

    详细信息的有用链接如下:

    http://secretgeek.net/json_3mins.asp

    链接地址: http://www.djcxy.com/p/1299.html

    上一篇: What is JSON and why would I use it?

    下一篇: Is JSON Hijacking still an issue in modern browsers?