php中json_decode()和json_encode()的使用方法


Posted in PHP onJune 04, 2012

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 对 JSON 格式的字符串进行编码

说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量

参数

json
待解码的 json string 格式的字符串。

assoc
当该参数为 TRUE 时,将返回 array 而非 object 。

返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

范例

Example #1 json_decode() 的例子

<?php 

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 

var_dump(json_decode($json)); 

var_dump(json_decode($json, true)); 

?>

上例将输出:
object(stdClass)#1 (5) { 

["a"] => int(1) 

["b"] => int(2) 

["c"] => int(3) 

["d"] => int(4) 

["e"] => int(5) 

} 
array(5) { 

["a"] => int(1) 

["b"] => int(2) 

["c"] => int(3) 

["d"] => int(4) 

["e"] => int(5) 

}

$data='[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]'; 

echo json_decode($data);

结果为:
Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
echo json_decode($data,true);

结果:
Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 对变量进行 JSON 编码

Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式

Report a bug 参数

value
待编码的 value ,除了resource 类型之外,可以为任何数据类型

该函数只能接受 UTF-8 编码的数据

options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.

Report a bug 范例

Example #1 A json_encode() 的例子

<?php 

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 

?>

以上例程会输出:
{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 json_encode() 函数中 options 参数的用法
<?php 

$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9"); 
echo "Normal: ", json_encode($a), "\n"; 

echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n"; 

echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n"; 

echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n"; 

echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n"; 

echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n"; 

echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n"; 

$b = array(); 

echo "Empty array output as array: ", json_encode($b), "\n"; 

echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n"; 

$c = array(array(1,2,3)); 

echo "Non-associative array output as array: ", json_encode($c), "\n"; 

echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n"; 

$d = array('foo' => 'bar', 'baz' => 'long'); 

echo "Associative array always output as object: ", json_encode($d), "\n"; 

echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n"; 

?>

以上例程会输出:
Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] 

Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] 

Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] 

Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] 

Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] 

Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"] 

All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"] 
Empty array output as array: [] 

Empty array output as object: {} 

Non-associative array output as array: [[1,2,3]] 

Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}} 

Associative array always output as object: {"foo":"bar","baz":"long"} 

Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 连续与非连续数组示例
<?php 

echo "连续数组".PHP_EOL; 

$sequential = array("foo", "bar", "baz", "blong"); 

var_dump( 

$sequential, 

json_encode($sequential) 

); 
echo PHP_EOL."非连续数组".PHP_EOL; 

$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong"); 

var_dump( 

$nonsequential, 

json_encode($nonsequential) 

); 

echo PHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL; 

unset($sequential[1]); 

var_dump( 

$sequential, 

json_encode($sequential) 

); 

?>

以上例程会输出:
连续数组 

array(4) { 

[0]=> 

string(3) "foo" 

[1]=> 

string(3) "bar" 

[2]=> 

string(3) "baz" 

[3]=> 

string(5) "blong" 

} 

string(27) "["foo","bar","baz","blong"]" 
非连续数组 

array(4) { 

[1]=> 

string(3) "foo" 

[2]=> 

string(3) "bar" 

[3]=> 

string(3) "baz" 

[4]=> 

string(5) "blong" 

} 

string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}" 

删除一个连续数组值的方式产生的非连续数组 

array(3) { 

[0]=> 

string(3) "foo" 

[2]=> 

string(3) "baz" 

[3]=> 

string(5) "blong" 

} 

string(33) "{"0":"foo","2":"baz","3":"blong"}"

$obj->Name= 'a1';$obj->Number ='123'; 

$obj->Contno= '000'; 

echo json_encode($obj);

结果为:
{"Name":"a1", 

"Number":"123", 

"Contno":"000" 

}

可以看出json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。

PS:本站还提供了几款功能十分强大的json解析、转换与格式化工具供大家选择使用,相信对于大家接下来的json格式数据处理会有所帮助:

在线JSON代码检验、检验、美化、格式化工具:
http://tools.3water.com/code/json

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

json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.3water.com/code/jsoncodeformat

C语言风格/HTML/CSS/json代码格式化美化工具:
http://tools.3water.com/code/ccode_html_css_json

PHP 相关文章推荐
PHP 数据库树的遍历方法
Feb 06 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 #PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 #PHP
PHP仿盗链代码
Jun 03 #PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 #PHP
PHP中设置时区方法小结
Jun 03 #PHP
php 函数中使用static的说明
Jun 01 #PHP
PHP number_format() 函数定义和用法
Jun 01 #PHP
You might like
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python和C语言混合编程实例
2014/06/04 Python
python递归计算N!的方法
2015/05/05 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
执行力心得体会
2013/12/31 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
六个一活动实施方案
2014/03/21 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
Python必备技巧之字符数据操作详解
2022/03/23 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers