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 应用程序的安全 -- 不能违反的四条安全规则
Nov 26 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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绕过open_basedir限制操作文件的方法
2018/06/10 PHP
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
js a标签点击事件
2017/03/30 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
python tornado使用流生成图片的例子
2019/11/18 Python
dpn网络的pytorch实现方式
2020/01/14 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python 画图 图例自由定义方式
2020/04/17 Python
浅析Python 责任链设计模式
2020/09/11 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
酒店管理专业毕业生推荐信
2013/11/10 职场文书
毕业研究生的自我鉴定
2013/11/30 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
酒店节能减排方案
2014/05/26 职场文书
小学社会实践活动总结
2014/07/03 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
商品陈列协议书
2014/09/29 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
入党介绍人考察意见
2015/06/01 职场文书
结婚典礼致辞
2015/07/28 职场文书
生产设备维护保养制度
2015/08/06 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python