zoukankan      html  css  js  c++  java
  • PHP中JSON的应用

      文章来源:PHP开发学习门户

      地址:  http://www.phpthinking.com/archives/513


        互联网的今天,AJAX已经不是什么陌生的词汇了。说起AJAX,可能会马上想起因RSS而兴起的XML。

    不可否认,XML是非常不错的数据存储方式,可是其灵活恰恰造成了其解析的困难。当然,这里所指的困难,是相对于本文的主角--JSON而言。

        JSON为何物?我就不反复概念了。通俗的说,它是一种数据的存储格式,就像PHP序列化后的字符串一样。它是一种数据描写叙述。比方我们将一个数组序列化后存放,就能够非常easy的反序列化后应用。JSON也是如此,仅仅只是他搭建的是clientJavascript和服务端PHP的交互桥梁。我们用PHP生成JSON后的字符串。然后把这个字符串传给前台Javascript,Javascirpt就能够非常easy的将其反JSON然后应用。说通俗点,它真的非常像数组。 言归正传。怎样使用JSON。PHP5.2開始内置了JSON的支持。当然,假设低于这个版本号的话,那么市面上有非常多PHP版本号的实现。随便下一个用就OK啦。如今主要是说说PHP内置支持的JSON。非常简单,两个函数:json_encode和json_decode(跟序列化非常像啦)。一个编码。一个解码。先看看编码的使用:

    <?

    php     $arr = array(         'name' => '陈毅鑫',         'nick' => '深空',         'contact' => array(             'email' => 'shenkong at qq dot com',             'website' => 'http://www.chinaz.com',         )     );     $json_string = json_encode($arr);     echo $json_string;     ?> 

    非常easy的将一个数组JSON了。须要指出的是,在非UTF-8编码下,中文字符将不可被encode。结果会出来空值,所以。假设你使用gb2312编写PHP代码,那么就须要将包括中文的内容使用iconv或者mb转为UTF-8再进行json_encode,上面输出结果例如以下:

    
    {"name":"u9648u6bc5u946b","nick":"u6df1u7a7a""contact":{"email":"shenkong at qq dot com","website":"http://www.chinaz.com"}} 
    

    我都说了和序列化非常像,你还不信。编码后就要解码,PHP提供了对应的函数json_decode。json_decode运行后,将会得到一个对象,操作例如以下:

    
    <?

    php     $arr = array(         'name' => '陈毅鑫',         'nick' => '深空',         'contact' => array(             'email' => 'shenkong at qq dot com',             'website' => 'http://www.chinaz.com',         )     );     $json_string = json_encode($arr);     $obj = json_decode($json_string);     print_r($obj);     ?> 

    訪问对象内的属性会吧?$obj->name。这样子的。当然。也能够把它转位数组,方便调用啦:

    
    $json_string = json_encode($arr);    
    $obj = json_decode($json_string);    
    $arr = array($obj);    
    print_r($arr);  
    

    PHP转来转去的用途不是特别大。除了缓存生成。感觉还不如直接存数组呢。只是,当你和前台交互的时候,它的作用就出来咯,以下看看我怎么用Javascript来使用这段字符:

    <script type="text/javascript">  
    var arr = {"name":"u9648u6bc5u946b","nick":"u6df1u7a7a""contact":{"email":"shenkong at qq dot com","website":"http://www.chinaz.com"}};    
    alert(arr.name)    
    </script>  
    

    上面中。直接将这个字符串赋给一个变量。它就变成一个Javascript数组了(专业化术语应该不叫数组。只是因为PHP的习惯问题,我就一直叫数组好了,方便理解)。

    这样。能够非常方便的对arr进行遍历或者随意做你想做的事情了。写到这里。好像都没提到AJAX哦?是哦,联想一下。假设服务端返回的responseText用JSON过的字符串取代XML的话,前台Javascript处理起来是不是非常方便呢?狗皮膏药就是这样用的。 事实上写到这里。除了数据的存储格式不太一样外,JSON和XML也没什么太大差别哦,只是以下我说的一点。

    尽管和XML没多大关系。只是。能够说明JSON更大范围的应用,那就是。跨域的数据调用。因为安全性问题,AJAX不支持跨域调用,这样要调用不同域名下的数据。非常麻烦哦,尽管有解决方式(stone在他的讲座上提到过了代理啊什么的尽管听不懂可是知道能解决)。

    我写两个文件,足以展示跨域调用了。 主调文件index.html

    <script type="text/javascript">   
    function getProfile(str) {    
        var arr = str;    
        document.getElementById('nick').innerHTML = arr.nick;    
    }    
    </script>   
    <body><div id="nick"></div></body>   
    <script type="text/javascript" src="http://www.openphp.cn/demo/profile.php"></script>  
    

    被调文件profile.php

    <?php    
    $arr = array(    
        'name' => '陈毅鑫',    
        'nick' => '深空',    
        'contact' => array(    
            'email' => 'shenkong at qq dot com',    
            'website' => 'http://www.chinaz.com',    
        )    
    );    
    $json_string = json_encode($arr);    
    echo "getProfile($json_string)";    
    ?> 
    

    非常显然,当index.html调用profile.php时,JSON字符串生成。并作为參数传入getProfile,然后将昵称插入到div中,这样一次跨域数据交互就完毕了,是不是特别简单。既然JSON这么简单易用并且好用,还等什么呢?

  • 相关阅读:
    How To Scan QRCode For UWP (4)
    How To Crop Bitmap For UWP
    How To Scan QRCode For UWP (3)
    How To Scan QRCode For UWP (2)
    How To Scan QRCode For UWP (1)
    How to change windows applicatioin's position via Win32 API
    8 Ways to Become a Better Coder
    How to resize or create a thumbnail image from file stream on UWP
    C# winform压缩文件夹带进度条
    MS ACCESS MID函数
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6879945.html
Copyright © 2011-2022 走看看