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与php MySQL 之间的关系
Jul 17 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
php返回json数据函数实例
Oct 09 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
php给图片加文字水印
Jul 31 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
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 flush类输出缓冲剖析
2008/10/19 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
php cli配置文件问题分析
2015/10/15 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
python实现贪吃蛇游戏
2020/03/21 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
农林环境专业求职信
2014/03/13 职场文书
学习交流会主持词
2014/04/01 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
个人投资计划书
2014/05/01 职场文书
市场营销调查计划书
2014/05/02 职场文书
员工安全生产责任书
2014/07/22 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python