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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
php 设计模式之 单例模式
Dec 19 PHP
检测png图片是否完整的php代码
Sep 06 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
PHP简单实现无限级分类的方法
May 13 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
php递归函数怎么用才有效
Feb 24 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单态设计模式(单例模式)实例
2014/11/18 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python中集合类型(set)学习小结
2015/01/28 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
python中update的基本使用方法详解
2019/07/17 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
python绘制高斯曲线
2021/02/19 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
几道Java和数据库的面试题
2013/05/30 面试题
职业规划书如何设计?
2014/01/09 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
副总经理任命书
2014/06/05 职场文书
MySQL锁机制
2021/04/05 MySQL