首页 php教程 php手册 PHP中JSON的应用

PHP中JSON的应用

Jun 06, 2016 pm 07:58 PM
ajax json php 互联网 应用 是什么

互联网的今天,AJAX已经不是什么陌生的词汇了。说起AJAX,可能会立即想起因RSS而兴起的XML。XML的解析,恐怕已经不是什么难题了,特别是PHP5,大量的XML解析器的涌现,如最轻量级的SimpleXML。不过对于AJAX来说,XML的解析更倾向于前台Javascript的支持度。

互联网的今天,AJAX已经不是什么陌生的词汇了。说起AJAX,可能会立即想起因RSS而兴起的XML。XML的解析,恐怕已经不是什么难题了,特别是PHP5,大量的XML解析器的涌现,如最轻量级的SimpleXML。不过对于AJAX来说,XML的解析更倾向于前台Javascript的支持度。我想所有解析过XML的人,都会因树和节点而头大。不可否认,XML是很不错的数据存储方式,但是其灵活恰恰造成了其解析的困难。当然,这里所指的困难,是相对于本文的主角--JSON而言。

JSON为何物?我就不重复概念了。通俗的说,它是一种数据的存储格式,就像PHP序列化后的字符串一样。它是一种数据描述。比如我们将一个数组序列化后存放,就可以很容易的反序列化后应用。JSON也是如此,只不过他搭建的是客户端Javascript和服务端PHP的交互桥梁。我们用PHP生成JSON后的字符串,然后把这个字符串传给前台Javascript,Javascirpt就可以很容易的将其反JSON然后应用。说通俗点,它真的很像数组。

言归正传,如何使用JSON。PHP5.2开始内置了JSON的支持。当然,如果低于这个版本的话,那么市面上有很多PHP版本的实现,随便下一个用就OK啦。现在主要是说说PHP内置支持的JSON。很简单,两个函数:json_encodejson_decode(跟序列化很像啦)。一个编码,一个解码。先看看编码的使用:

 

  • $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;  
  • ?> 
  •  

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

     

    {"name":"\u9648\u6bc5\u946b","nick":"\u6df1\u7a7a","contact":{"email":"shenkong at qq dot com","website":"http:\/\/www.chinaz.com"}} 

     

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

     

  • $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":"\u9648\u6bc5\u946b","nick":"\u6df1\u7a7a","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

     

  • $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这么简单易用而且好用,还等什么呢?

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您听不到任何人,如何修复音频
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

    PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

    CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

    为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

    CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

    为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

    CakePHP 使用数据库 CakePHP 使用数据库 Sep 10, 2024 pm 05:25 PM

    在 CakePHP 中使用数据库非常容易。本章我们将了解CRUD(创建、读取、更新、删除)操作。

    讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

    CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

    CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

    可以通过在控制器中添加以下两行来创建验证器。

    CakePHP 日志记录 CakePHP 日志记录 Sep 10, 2024 pm 05:26 PM

    登录 CakePHP 是一项非常简单的任务。您只需使用一项功能即可。您可以记录任何后台进程(如 cronjob)的错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。提供了 log() 函数

    如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

    Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

    See all articles