php处理json格式数据经典案例总结


Posted in PHP onMay 19, 2016

本文实例总结了php处理json格式数据的方法。分享给大家供大家参考,具体如下:

1.json简介:

何为json?

简 单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序.

通俗点讲,它是一种数据的存储格式,就像php序列化后的字符串一样。

它也是一种数据描述,比如:我们将一个数组序列化后存放,就可以很容易的反序列化后应用;json也是如此,只不过它搭建的是客户端javascript和服务器端php交互的桥梁。

如何使用json?

自php5.2开始及之后的版本都内置了json的支持,主要有两个函数:

json_encode():编码,生成一个json字符串
json_decode():一个解码

注意:经过json_encode()函数编码后,将返回一个json格式的字符串,如:$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';将json格式的字符串输出,将得到一个json格式的javascript对象

2.json案例一:

json_encode的使用:

<?php
$arr = array(
 'name' => '魏艳辉',
 'nick' => '为梦翱翔,
 'contact' => array(
 'email' => 'zhuoweida@163.com',
 'website' => 'http://zhuoweida.blog.tianya.cn',
 )
);
$json_string = json_encode($arr);
echo $json_string;//json格式的字符串
?>

结果:

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

提示:输出的数据本身就是json格式的js对象,因为没有带引号,所以在前台页面可以直接将其当做json对象使用

总结:关联数组是按照javascript对象来构造的

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

3.json案例二:

json_decode的使用:

<?php
$arr = array(
 'name' => '魏艳辉',
 'nick' => '为梦翱翔',
 'contact' => array(
 'email' => 'zhuoweida@163.com',
 'website' => 'http://zhuoweida.blog.tianya.cn',
 )
);
$json_string = json_encode($arr);
$obj = json_decode($json_string); //可以使用$obj->name访问对象的属性
$arr=json_decode($json_string,true);//将第二个参数为true时将转化为数组
print_r($obj);
print_r($arr);
?>

结果:

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

总结:关联数组是按照JavaScript对象来构造的

提示:输出的数据本身就是json格式的js对象,因为没有带引号,所以在前台页面可以直接将其当做json对象使用

分析:编码后就要解码,php提供了相应的函数json_decode,执行此函数后,将会得到一个对象或数组。

4.json案例三:

当和前台交互的时候,json的作用就显示出来了:

例如:javascript代码如下:

<script type="text/javascript">
var obj = {
      "name":"\u9648\u6bc5\u946b",
      "nick":"\u6df1\u7a7a",
      "contact":
          {
           "email":"shenkong at qq dot com",
           "website":"http:\/\/www.chinaz.com"
          }
     };
     alert(obj.name);
</script>

代码分析:上面代码,直接将json格式数据赋给一个变量,它就变成一个javascript对象了,这样我们可以很方便的对obj进行遍历

提示:在javascript中,数组的访问是通过索引来访问的;对象属性的访问是通过 对象名.属性名  来访问的

提示:输出的数据本身就是json格式的js对象,因为没有带引号,所以在前台页面可以直接将其当做json对象使用

5.json案例四:json跨域的数据调用:

例如:主调文件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://localhost/demo/profile.php"></script>

例如:被调用文件profile.php

<?php
$arr = array(
  'name' => '魏艳辉',
    'nick' => '为梦翱翔',
     'contact' => array(
         'email' => 'zhuoweida@163.com',
         'website' => 'http://zhuoweida.blog.tianya.cn',
      )
    );
$json_string = json_encode($arr);
echo "getProfile($json_string)";
?>

代码分析:当index.html调用profile.php,json字符串生成,并作为参数传入getProfile,然后将昵称插入到div中 ,这样一次跨域数据交互就完成了

6.js如何解析服务器端返回的json字符串?

我们在使用ajax做客户端和服务器端交互的时候,在不适用jQuery等框架的前提下,一般的做法是让服务器端返回一段json字符串,然后在客户端将它解析成javascript对象。解析时用到的方法一般是eval或者是new function,而目前ie8和firefox3.1有内置了原生的json对象。

例1:

var strTest='{"a":"b"}'; //转换成JS对象
var obj=eval("("+strTest+")") ;

例2:

function strtojson(strTest){
  JSON.parse(str);
}

7.案例五:对象的json化

<?php
//1.对象
class JsonTest{
  var $id = 1;
  var $name = 'heiyeluren';
  $gender = '男';
}
$obj = new JsonTest;
echo json_encode($obj)."<br /> ";
?>

浏览器输出结果:

{
  "id":1,
  "name":"heiyeluren",
  "gender":"\u7537"
}

结论:对象的json字符串是按照javascript对象来构造的。无法识别中文,所有的中文字符串没有被正确显示出来

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

提示:输出的数据本身就是json格式的js对象,因为没有带引号,所以在前台页面可以直接将其当做json对象使用

8.案例六:索引数组的json化

<?php
$arr1 = array(1, 'heiyeluren', '男');
echo json_encode($arr1)."<br /> ";
?>

浏览器输出结果:

[
  1,
  "heiyeluren",
  "\u7537"
]

结论:纯数字索引数组的json字符串是按照javascript能够识别的数组来存储的,而不是按照javascript能够识别的对象来存储的。无法识别中文,所有的中文字符串没有被正确显示出来

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

9.案例七:关联数组的json化

<?php
$arr2 = array("id"=>1, "name"=>'heiyeluren', "gender"=>'男');
echo json_encode($arr2)."<br /> ";
?>

浏览器输出结果:

{
  "id":1,
  "name":"heiyeluren",
  "gender":"\u7537"
}

结论:关联索引数组的json字符串是按照javascript对象的形式来构造的。无法识别中文,所有的中文字符串没有被正确显示出来

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

提示:输出的数据本身就是json格式的js对象,因为没有带引号,所以在前台页面可以直接将其当做json对象使用

10.案例八:对多维索引数组的进行json化

<?php
$arr3 = array(array(1, 'heiyeluren', '男'), array(1, 'heiyeluren', '男'));
echo json_encode($arr3)."<br /> ";?>

浏览器输出结果:

[
  [1,"heiyeluren","\u7537"],
  [1,"heiyeluren","\u7537"]
]

结论:多维数字索引数组的json字符串是按照javascript能够识别的数组来存储的。无法识别中文,所有的中文字符串没有被正确显示出来

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

提示:输出的数据可以直接将其当做javascript数组使用

11.案例九:对多维关联数组的进行json化

<?php
$arr4 = array(
  array("id"=>1, "name"=>'heiyeluren', "gender"=>'男'),
  array("id"=>1, "name"=>'heiyeluren', "gender"=>'男')
);
echo json_encode($arr4)."<br /> ";
?>

浏览器输出结果:

[
  {"id":1,"name":"heiyeluren","gender":"\u7537"},
  {"id":1,"name":"heiyeluren","gender":"\u7537"}
]

结论:多维关联索引数组是按照外围是JavaScript数组,中间的索引数组是对象。无法识别中文,所有的中文字符串没有被正确显示出来

分析:上述案例很简单的将一个数组json化了,需要指出的是在非utf-8编码下,中文字符将不可被encode,结果会出来空值,所以如果你使用gb2312编码编写php代码,那么就需要将包含中文的内容使用iconv或mb系列函数转化为utf-8后在json_encode

提示:输出的数据可以直接将其当做javascript数组使用

12.案例十:json格式的javascript对象的创建

json的格式与语法:

var jsonobject=
{
    //对象内的属性语法(属性名与属性值是成对出现的)
    propertyname:value,
    //对象内的函数语法(函数名与函数内容是成对出现的)
    functionname:function(){...;}
};

注意:

①jsonobject -- JSON对象名称
②propertyname -- 属性名称
③functionname -- 函数名称
④一对大括号,括起多个"名称/值"的集合
⑤属性名或函数名可以是任意字符串,甚至是空字符串
⑥逗号用于隔开每对"名称/值"对

提示:

①在javascript中,数组的访问是通过索引来访问的; 对象属性的访问是通过 对象名.属性名  来访问的
②经过json_encode()化而的数据都是js能够识别的格式,而经过json_decode()化的数据都是php能够识别的格式,这一点大家心里要清楚
③经过json_encode()化而输出的数据都是json格式的javascript对象,在前台可直接将其当做js对象使用

另外,本站还提供了如下格式化与转换工具方便大家使用:

php代码在线格式化美化工具:
http://tools.3water.com/code/phpformat

在线XML/JSON互相转换工具:
http://tools.3water.com/code/xmljson

JavaScript代码美化/压缩/格式化/加密工具:
http://tools.3water.com/code/jscompress

在线XML格式化/压缩工具:
http://tools.3water.com/code/xmlformat

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
php 获取可变函数参数的函数
Aug 26 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
Oct 30 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 PHP
CI框架整合smarty步骤详解
May 19 #PHP
PHP QRCODE生成彩色二维码的方法
May 19 #PHP
PHP下载文件的函数实例代码
May 18 #PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 #PHP
CI框架的安全性分析
May 18 #PHP
PHP的swoole扩展安装方法详细教程
May 18 #PHP
CI框架支持$_GET的两种实现方法
May 18 #PHP
You might like
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
跟老齐学Python之用Python计算
2014/09/12 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
工会主席岗位责任制
2014/02/11 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
2015年维修工作总结
2015/04/25 职场文书
学校开除通知书
2015/04/25 职场文书
交心谈心活动总结
2015/05/11 职场文书
2016教师国培研修感言
2015/12/08 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers
keepalived + nginx 实现高可用方案
2022/12/24 Servers