我们何时/何时使用JSON?

时间:2009-07-21 20:16:57

标签: php javascript json

请告诉我,JSON的用途是什么(在Javascript和PHP中)。 当我们需要JSON方法时。

我从以下链接中读到,但是,我没有得到任何关于任何项目的JSON实现的信息。

http://www.json.org/js.html

9 个答案:

答案 0 :(得分:21)

JSON是一种轻量级数据交换格式(在节食时将其视为XML)。基本上任何可以使用XML来序列化数据的地方都可以使用JSON。

答案 1 :(得分:8)

尽管名称如此,但JSON格式的主要用途之一是在AJAX网页开发中(尽管肯定不是唯一的)。由于其轻量级语法,它通常比传统XML更受欢迎。

答案 2 :(得分:4)

JSON是用于传输数据的数据格式。它主要用于Javascript AJAX调用。

JSON的结构只是括号中的名称:值对。由于它的紧凑性和简单性,它是一个更好的结构,用于传输相对较小的数据集和可以分组为名称:值对的东西。

例如:

prototype.js Ajax调用转换和接收JSON数据:

my_prototype_class = Class.create();  
my_prototype_class.prototype = {
    initialize: function() { 
        this.myarray = new Array();
        //do initialization
    },      
    my_function: function(direction){  
        new Ajax.Request('/my/url.php', 
            {     
                method: 'post',
                parameters: {   name: value,
                                myarray_data: this.myarray.toJSON()  },   
                onSuccess: function(transport) { 
                    var response = transport.responseText.evalJSON();
                    //handle response   
                },
                onFailure: function(){
                    //handle failure
                }    
            });  
    }
} 
Event.observe(window, "load", function(){new my_prototype_class();}, false);

使用PHP,您可以使用以下内容处理请求:

function my_php_handler()
{   
    #parse POST data
    $name = $_POST["name"]; 
    $myarray_data = $_POST["myarray_data"];

    #transform the data in some way

    #return encoded string
    echo json_encode($results);
}

类似的东西:

[{"myarray": [], "name": value}]

将在http请求/响应中传递。此格式中的数据称为JSON。

答案 3 :(得分:3)

JSON只是一种数据格式。如果您需要存储或传输的数据不比JSON标准支持其值的嵌套系列的名称 - 值对更复杂,那么JSON可能是您项目的正确数据格式。

如果您的项目有数据存储/传输需求;)

答案 4 :(得分:3)

JSON是一种在Javascript和PHP之间来回传递数据的绝佳格式。我最常用的是状态信息。

这是一些用于对小型PHP脚本执行Ajax查询的Javascript。

    new Ajax.Request('dostuff.php', {
        method:  'get',
        parameters:  {'param1':  'this is param 1'},
        onSuccess:  function(response, jsonHeader){
          if(jsonHeader['status'] == 'Success'){
            //Everything is OK, do stuff
          }else{
            alert(jsonHeader['status']);
          }
        },
        onFailure:  function(){
            alert('Fail!');
        }
    });

然后,在PHP方面,您可以这样:

    $jsonHeader = array();

    if($_REQUEST['param1'])
    {
      echo '<p>You passed ' . $_REQUEST['param1'] . '</p>';
      $jsonHeader['status'] = 'Success';
    }else
    {
      $jsonHeader['status'] = 'Failed because the request was invalid';
    }

    if(is_array($jsonHeader) and sizeof($jsonHeader) > 0)
    {
      header('X-JSON: (' . json_encode($jsonHeader) . ')');
    }

纯粹的是Prototype 自动解码 PHP正在创建的X-JSON标头。

最终结果是Javascript中onSuccess方法的jsonHeader参数自动转换为与PHP中的$ jsonHeader数组相同的数组

答案 5 :(得分:2)

JSON是相对轻量级的数据交换格式(至少与XML或HTML相比),在Web客户端和Web服务器/服务之间交换少量数据时最有用。

然而,由于每行交换的开销,它不是交换大型数据列表的最佳选择(尽管比XML好得多)。

答案 6 :(得分:2)

如果您需要使用JavaScript代码操作检索到的数据(即通过浏览器中的Ajax调用),我建议使用JSON。在这种情况下,JSON非常舒适,因为您可以直接将其加载到JavaScript中并使用它(因此Java Script Object Notation =&gt; JSON)。这称为JavaScript对象中JSON字符串的反序列化。它可以通过使用eval()完成,但是 - 我读过 - 会带来一些安全问题,因此应该使用一些JSON(de)序列化器。

正如您提到的page所述,您有一些像

这样的JSON字符串
{"bindings": [
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
        {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
        {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
    ]
}

通过网络发送,由客户端上的一些Ajax调用启动,然后调用回调(例如在.Net中)

function onSuccess(result){
  var myObj = Sys.Serialization.JavaScriptSerializer.deserialize(result, false);
  myObj.bindings[0].ircEvent...
}

优点是使用JavaScript时简单(de)序列化,主要是使用Ajax进行Web开发。否则我不会真正使用JSON,而是依赖于XML,因为对于桌面应用程序,有非常强大的解析库。

答案 7 :(得分:2)

所有其他答案都很棒,但也许是对您的特定情况(JavaScript + PHP)最简单的解释: JSON是将JavaScript对象转换为PHP关联数组或对象的最简单方法(并且亦然)

查看json_encode()json_decode()以了解PHP方面的内容。在JavaScript方面,一个简单的eval()是从JSON字符串中获取对象的最简单(但最不安全!)的方法,但您选择的库肯定会有为您处理这个问题的函数,如果如果您要定位较新的浏览器,则可以使用ECMAScript 5 JSON object

答案 8 :(得分:1)

JSON主要用作AJAX Web应用程序中XML的轻量级和人类可读替代方案。