我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本篇文章中,苏南大叔要和大家分享一个非常常见的php函数json_decode/json_encode的使用方法。大家经常使用这个这个函数,用于把一段字符串,变成一个json对象。但是不知道大家有没有仔细想过这两个函数的更深层次的用法呢?

苏南大叔:你所不认识的php函数json_decode和json_encode - php-json-function
你所不认识的php函数json_decode和json_encode(图3-1)

本篇文章的姐妹文章是:你所不认识的php函数file_get_contents

json_decode 的第二个参数

json_decode 存在着第二个/第三个/第四个 参数,详情可以参见这里:

虽然我们经常使用的,仅仅是第一个参数。苏南大叔今天想给大家说说json_decode的第二个参数。先看看下面的例子。

$json = '{"a":1,"b":2,"c":3}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));

我们来看一下输出。

苏南大叔:你所不认识的php函数json_decode和json_encode - 001
你所不认识的php函数json_decode和json_encode(图3-2)

json_decode 第二个参数,默认为false,返回的是object。当为true的时候,返回的是array

json_encode 的第二个参数

同样,json_encode,也存在着很多个参数。但是苏南大叔只想和大家分享一下,第二个参数中的一个特殊用法。同样,看例子说话。

$a = array("中文","english");
echo "Normal: ",  json_encode($a), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";

这个的输出是:

苏南大叔:你所不认识的php函数json_decode和json_encode - 002
你所不认识的php函数json_decode和json_encode(图3-3)

JSON_UNESCAPED_UNICODE,这个参数值对于我们平时调试php,非常有用。使用他的话,中文输出还是中文,而不加它的话,中文汉字就会被编码成,我们不认识的“乱码”。那么处于实际情况考虑,对于大家来说,这第二个参数,都应该恒定是JSON_UNESCAPED_UNICODE ,才更好些。

JSON_UNESCAPED_UNICODE在测试中的实际值是256,所以,如果记不住这个很长的英文字符串,直接写数字256也是可以的。

两个json函数的调试

这两个函数如果数据处理失败的情况,虽然并不常见。但是,碰到的话,我们在屏幕上却看不到任何的错误输出。这两个函数是使用json_last_error() 来获取错误信息的。真个是不是很超乎意料?具体的例子,可以参见这里。

对于普通的情况上来说,我们只需要对比json_last_error()是不是等于JSON_ERROR_NONE即可。如果为true,就是没有错误拉。否则,就是有错误拉。具体的错误代码,请参见文档说明。

//...
$json_obj = json_decode($content_json, TRUE);
if ($json_obj) {
  //...
} else {
  $ret = json_last_error();
  switch($ret){
     //...
  }
}

总结

php虽然是世界上最好的语言,但是深入了解后,就会觉得它是那么的神奇到不可思议。哈哈哈~~~ 更多php相关文章,请点击这里来支持苏南大叔。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    json