首页 文章

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

提问于
浏览
492

我已经浏览了维基百科并使用Google搜索并阅读了官方文档,但我仍然没有达到我真正理解JSON是什么的原因,以及为什么我会使用它 .

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

15 回答

  • 8

    JSON (JavaScript Object Notation) is a lightweight format that is used for data interchanging. 它基于JavaScript语言的子集(对象在JavaScript中构建的方式) . 作为stated in the MDN,一些JavaScript不是JSON,而一些JSON不是JavaScript .

    使用它的一个例子是Web服务响应 . 在'old'天,Web服务使用XML作为传输数据的主要数据格式,但由于JSON出现(JSON格式由Douglas Crockford在RFC 4627中指定),因此它一直是首选格式,因为它更多 lightweight

    您可以在JSON web site官方找到更多信息 .

    JSON基于两种结构:

    • 名称/值对的集合 . 在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组 .

    • 有序的值列表 . 在大多数语言中,这被实现为数组,向量,列表或序列 .


    JSON结构

    JSON Object diagram

    JSON Array diagram

    JSON Value diagram

    JSON String diagram

    JSON Number diagram

    以下是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 (in Javascript) is a string!

    人们通常认为所有Javascript对象都是JSON,而JSON是Javascript对象 . 这是不正确的 .

    在Javascript中 var x = {x:y}not JSON ,这是一个 Javascript object . 这两者不是一回事 . JSON等价物(用Javascript语言表示)将是 var x = '{"x":"y"}' . xstring 类型的对象,而不是它自己的对象 . 要将其转换为完全成熟的Javascript对象,您必须首先解析它, var x = JSON.parse('{"x":"y"}');x 现在是一个对象,但这不再是JSON .

    Javascript object Vs JSON


    使用JSON和JavaScript时,您可能会尝试使用 eval 函数来评估回调中返回的结果,但不建议这样做,因为有两个字符(U 2028和U 2029)在JSON中有效但在JavaScript中没有(阅读更多here) .

    因此,必须始终尝试使用Crockford的脚本来检查有效的JSON,然后再进行评估 . 链接到脚本说明的是here,这里是js文件的direct link . 现在每个主流浏览器都有its own implementation .

    有关如何使用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的人,请查看this post,其中解释并确认 .


    参考文献

  • 601

    简而言之 - 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中为各种编程语言序列化和反序列化对象 .

  • 1

    所有上述答案都集中在具体细节上 . 因此,我将尝试解释这个概念,以便您能够理解上述内容 .

    What is JSON? – How I explained it to my wifeTM

    Me: “这基本上是一种以书面形式与某人沟通的方式......但却有规则 .

    Wife: 是啊....?

    ME: 让我们以英语为例:我们有规则 - 句号,逗号,括号,连字符,撇号等,它们都意味着不同的东西 . 基本上我们都同意完全停止意味着什么(即我们在读一个时就应该暂停) .

    Wife: 所以你是说JSON是一种向某人写英文的方式,但它有双方都同意的规则吗?

    Me: 完全正确!除了这些规则是非常具体的 . 平淡无奇的英语,规则非常宽松:就像笼子里的战斗:你可以做任何你想做的事情,除了一些基础知识(例如眼睛刨削) . 例如,如果我想告诉美国国税局关于我们的家庭,我可以使用平淡无奇的英语来做一些不同的事情 . 注意每种方式的差异:

    Me:

    •示例1:我们的家庭有4个人:您,我和2个孩子 .

    •例2:我们的家人:你,我,孩子1和孩子2 .

    •例3:家庭:[你,我,孩子1,孩子2]

    •例4:我们家里有4个人:妈妈,爸爸,小孩1和小孩2 .

    Wife: 好的,我明白了 . 你可以用英语用不同的方式说同样的话 . 你可以在这里和那里添加一些单词,这里和那里有一些逗号,每个人都会理解 .

    Me: 完全正确 . 除JSON外,规则非常严格 . 您只能以某种方式进行沟通 . 而且你必须遵循这些规则让别人理解它:括号,某些地方的逗号 .

    Wife: 为什么他们不使用普通英语呢?

    Me: 他们会的,但请记住我们正在处理电脑 . 计算机是愚蠢的,无法理解句子 . 因此,当涉及计算机时我们必须非常具体,否则他们会感到困惑 . 此外,JSON是一种相当有效的通信方式,因此大多数不相关的东西都被删除了,这很有用 . 如果你想把我们的家人和计算机联系起来,你可以这样做的一种方式是这样的:

    {
                    "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
    }
    

    ......那基本上就是JSON . 但请记住,您必须遵守JSON语法规则 . 如果你打破这些规则,那么计算机根本就不会理解(即解析)你正在写的东西 .

    Wife: 那我怎么写Json?

    Me: 阅读上述答案以了解具体细节 . 简而言之,您必须使用键值对和数组进行通信 .

    Summary

    JSON基本上是一种通过非常非常具体的规则向某人传达数据的方式 .

  • 16

    简而言之,它是一个用于传递数据的脚本符号 . 在某些方面是XML的替代方案,本机支持基本数据类型,数组和关联数组(名称 - 值对,称为对象,因为它们代表的是这些) .

    语法是在JavaScript中使用的,JSON本身代表“JavaScript Object Notation” . 然而,它已经变得便携,并且也用于其他语言 .

    这里有一个有用的细节链接:

    http://secretgeek.net/json_3mins.asp

  • 7

    JSON格式通常用于通过网络连接序列化和传输结构化数据 . 它主要用于在服务器和Web应用程序之间传输数据,作为XML的替代方案 .

  • 1

    JSON是JavaScript Object Notation . 与XML相比,它是一种跨网络连接传输数据集的更紧凑的方式 . 我建议在任何类似AJAX的应用程序中使用JSON,否则XML将成为“推荐”选项 . XML的详细程度将增加下载时间和增加的带宽消耗($$$) . 您可以使用JSON实现相同的效果,并且其标记几乎专用于数据本身而不是底层结构 .

  • 3

    常见的简答是:如果您使用AJAX发出数据请求,您可以轻松地将对象作为JSON字符串发送和返回 . Javascript支持toJSON()的可用扩展调用所有javascript类型,用于在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结果非常方便 .

    • 更新(十年后):不要这样做,请使用JSON.parse
  • 47

    What is JSON?

    JavaScript Object Notation(JSON)是一种受JavaScript对象文字启发的轻量级数据交换格式 .

    JSON values can consist of:

    对象(名称 - 值对的集合)数组(值的有序列表)字符串(用双引号)数字true,false或null

    JSON与语言无关 .

    JSON with PHP?

    在PHP V5.2.0之后,JSON扩展被解码并将功能编码为默认值 .

    Json_encode - 返回值的JSON表示Json_decode - 解码JSON字符串Json_last_error - 返回发生的最后一个错误 .

    JSON Syntax and Rules?

    JSON语法派生自JavaScript对象表示法语法:

    数据在名称/值对中数据用逗号分隔卷曲括号保持对象方括号包含数组

    http://www.codingslover.com/2015/05/json-with-php-javascript-and-ajax.html

    JSON Example

  • 3

    I like JSON mainly because it's so terse . 对于可以被gzip压缩的Web内容,这不一定是一个大问题(因此为什么 x html如此受欢迎) . 但有时候这可能是有益的 .

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

    如另外一个好处是,如果你熟悉Python或Javascript,你已经非常了解JSON并且可以在没有经过多少培训的情况下解释它 .

  • 28

    我们必须在大学做一个项目,我们面临一个非常大的问题,它被称为同源政策 . 除此之外,它使得来自Javascript的XMLHttpRequest方法无法向您网站所在的域以外的域发出请求 .

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

    这是实用的东西:Yahoo JSON

  • 15

    JSON和传统语法之间的区别如下(在Javascript中)

    Conventional

    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","mike.Anderson@office.com");
    

    With 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':'mike.adnersone@office.com'});
    

    我们必须记住的重要一点是,如果我们必须构建具有100个元素而没有JSON方法的“Employee”类或模态,我们必须在创建类时解析所有内容 . 但是使用JSON,只有在定义了类的新对象时,我们才能内联对象 .

    所以这一行是使用JSON做事的方式(只是一种定义事物的简单方法)

    var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});
    
  • 40

    这很简单 . JSON代表Java Script Object Notation . 可以将其视为使用XML在软件组件之间传输数据的替代方法 .

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

  • -3

    JSON(Javascript对象表示法)是一种用于数据交换/传输的轻量级数据格式 . 它是JavaScript中的键值对 . 对于REST API,它广泛用于从服务器到客户端的数据传输 . 如今许多社交媒体网站都在使用它 . 虽然我没有看到它在数据类型方面与XML一样健壮 . XML具有非常丰富的数据类型和XSD . JSON在这方面有点缺乏 .

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

  • 1

    有时在没有要求的情况下给出了技术性,虽然许多最高投票的答案都是准确的技术和具体的,但我个人认为它们不像维基百科或者在维基百科上那样容易理解或简洁 . 官方文件 .

    我喜欢JSON的方式就是它 - 一种不同语言世界中的语言 . 但是,JSON和其他语言之间的区别在于“每个人”都说“JSON”以及他们的“母语” .

    使用现实世界的例子,让我们假装我们有三个人 . 一个人说伊博语是他们的母语 . 第二个人想与第一个人互动,然而,第一个人说约鲁巴语是他们的第一语言 .

    我们能做什么?

    值得庆幸的是,我们这个例子中的第三个人长大了说英语,但恰好说伊戈语和约鲁巴语作为第二语言,所以可以充当前两个人之间的中间人 .

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

  • 10

    尝试使用以下代码来解析php json响应:read.php

    <script
      src="https://code.jquery.com/jquery-3.2.1.min.js"
      integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
      crossorigin="anonymous"></script>
    <script type="text/javascript">  
    $.ajax({
        url:'index.php',
        data:{},
        type:"POST",
        success:function(result) {
            jsondecoded = $.parseJSON(result);
            $.each(jsondecoded, function(index, value) {
                $("#servers").text($("#servers").text() + " " + value.servername);
                console.log(value.start);
                console.log(value.end);
                console.log(value.id);
            });
        },
        statusCode: {
        404: function() {
          alert( "page not found" );
        }
      }
    });
    </script>
    

    server.php

    <?php 
    echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
    ?>
    

相关问题