JSON在写接口传递信息时经常会用到,而且用到的地方比较广泛,今天就详细说说json_encode()和json_decode()函数的使用方法。
首页明确一下,页面的编码要采用utf-8编码模式,因为测试内容中有中文,防止测试时看不到效果,显示空白!
一、首先,json_encode(),将数据转为JSON格式,有两种类型的数据可以转为JSON。
1.对象
定义一个class,new是一个对象,可以将对象转为json格式
- <?
- class json_test {
- public $name = "";
- public $web = "";
- public $keyword = "";
- }
- $json = new json_test();
- $json->name = "九品源码";
- $json->web = "www.19jp.com";
- $json->keyword = "PHP博客";
- echo json_encode($json);
- echo json_encode($json, JSON_UNESCAPED_UNICODE);//解决中文转义的问题
- ?>
输出结果:
- {"name":"\u674e\u96f7\u535a\u5ba2","web":"www.19jp.com","keyword":"PHP\u535a\u5ba2"}
- {"name":"九品源码","web":"www.19jp.com","keyword":"PHP博客"}
说明:其中\u674e这些因为是中文自动转换为了以 \u+数字的unicode数据。如果想直接输出中文也是可以的,加上JSON_UNESCAPED_UNICODE参数即可!
2.数组
定义一个键值对数组
- <?php
- $json_arr = array('a' => '九品源码', 'b' => '19jp.com', 'c' => 'PHP博客', 'd' => 10000);
- echo json_encode($json_arr);
- echo json_encode($json_arr, JSON_UNESCAPED_UNICODE);//防止中文转义
- ?>
输出结果:
- {"a":"\u674e\u96f7\u535a\u5ba2","b":"19jp.com","c":"PHP\u535a\u5ba2","d":10000}
- {"a":"九品源码","b":"19jp.com","c":"PHP博客","d":10000}
由此我们得出两个结论转为json格式数据的类型是对象和键值对数组。两者转换后的结果是一样的。
二、其次,json_decode(),对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
- <?php
- $json = '{"a":"\u674e\u96f7\u535a\u5ba2","b":"19jp.com","c":"PHP\u535a\u5ba2","d":10000}';
- var_dump(json_decode($json));
- var_dump(json_decode($json, true));//设置参数为true时,将返回数组,否则为对象。默认为false
- ?>
将刚才用json_encode转换后的结果进行json_decode()操作。
输出结果:
- object(stdClass)#1 (4) {
- ["a"]=>
- string(12) "九品源码"
- ["b"]=>
- string(10) "19jp.com"
- ["c"]=>
- string(9) "PHP博客"
- ["d"]=>
- int(10000)
- }
- array(4) {
- ["a"]=>
- string(12) "九品源码"
- ["b"]=>
- string(10) "19jp.com"
- ["c"]=>
- string(9) "PHP博客"
- ["d"]=>
- int(10000)
- }
这里我们知道了,第一个打印结果是一个对象,第二个是一个键值对数组。
这样我们也可以理解json_decode()的第二个参数,当参数值为true时,返回数组。当参数值为false(默认为false)时,返回对象。
以上就是PHP中json_encode()和json_decode()函数使用详解(中文编码)的详细内容,更多关于PHP中json_encode()和json_decode()函数使用详解(中文编码)的资料请关注九品源码其它相关文章!