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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
PHP编码转换
Nov 05 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
composer.lock文件的作用
Feb 03 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 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
php对大文件进行读取操作的实现代码
2013/01/23 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
Javascript的闭包
2009/12/31 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python注释详解
2016/06/01 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
python 实现表情识别
2020/11/21 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
什么是数据抽象
2016/11/26 面试题
四风问题自查报告剖析材料
2014/02/08 职场文书
2014年信访工作总结
2014/11/17 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
公司介绍信范文
2015/01/31 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript