PHP 中 json_decode() 和 json_encode() 使用方法
之前,米扑博客写过一篇文章:PHP 保持中文编码 json_encode 函数
今天,将详细介绍 PHP 中 json_decode() 和 json_encode() 使用方法
json_decode 字符串转成json格式
json_encode json格式转成字符串
1. json_decode() 字符串转json
json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0)
格式:接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
mixed json_decode ( string $json [, bool $assoc ] )
参数
json 待解码的 json string 格式的字符串。
assoc 该参数为 true 时,将返回 array 而非 object,推荐设置为 true
返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.
示例:
<?php $mimvp = '{"blog":"blog.mimvp.com","proxy":"proxy.mimvp.com","money":"money.mimvp.com"}'; // str to json var_dump(json_decode($mimvp)); var_dump(json_decode($mimvp, true)); // json to str echo json_encode(json_decode($mimvp)); echo "\n"; echo json_encode(json_decode($mimvp, true)); echo "\n"; ?>
运行结果:
class stdClass#1 (3) { public $blog => string(14) "blog.mimvp.com" public $proxy => string(15) "proxy.mimvp.com" public $money => string(15) "money.mimvp.com" } array(3) { 'blog' => string(14) "blog.mimvp.com" 'proxy' => string(15) "proxy.mimvp.com" 'money' => string(15) "money.mimvp.com" } {"blog":"blog.mimvp.com","proxy":"proxy.mimvp.com","money":"money.mimvp.com"} {"blog":"blog.mimvp.com","proxy":"proxy.mimvp.com","money":"money.mimvp.com"}
结果小结:
json_decode($data, true) 输出的一个关联数组,即 PHP数组或字典
json_decode($data)输出的是对象,不可直接当数组使用
2. json_encode() json 转字符串
json_encode (PHP 5 >= 5.2.0, PECL json >= 1.2.0)
格式:返回 value 值的 JSON 形式
string json_encode ( mixed $value [, int $options = 0 ] )
参数
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.
返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。
更新日志 版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.
示例:
<?php $mimvp = array( "blog"=>"blog.mimvp.com", "proxy"=>"proxy.mimvp.com", "money"=>"money.mimvp.com", ); echo json_encode($mimvp); ?>
运行结果:
{"blog":"blog.mimvp.com","proxy":"proxy.mimvp.com","money":"money.mimvp.com"}
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: ["","'bar'","\"baz\"","&blong&","\u00e9"] Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] Apos: ["","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] Quot: ["","'bar'","\u0022baz\u0022","&blong&","\u00e9"] Amp: ["","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] Unicode: ["","'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"}
连续与非连续数组示例
<?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"}"
可以看出json_encode()和json_decode()是编译和反编译过程,
注意:json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。
在线工具
在线JSON格式化工具:https://tool.lu
在线JSON格式化工具:http://json.parser.online.fr
在线JSON格式化工具:http://tools.jb51.net/code/json
在线XML/JSON转换:http://tools.jb51.net/code/xmljson
json在线转换工具:http://tools.jb51.net/code/jsoncodeformat
C语言风格/HTML/CSS/json代码格式化美化工具:http://tools.jb51.net/code/ccode_html_css_json
参考推荐:
PHP中json_decode()和json_encode()的使用方法
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-02-19 05:36:55
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!