网站地图    收藏   

主页 > php专栏 > php应用 >

PHP的json_encode使用分析说明 - php高级应用

来源:自学PHP网    时间:2014-11-27 22:16 作者: 阅读:

[导读] json的优点就不说了,有个习惯,我在输出json的时候,喜欢用 sprintf 拼成json格式,前两天被朋友说不标准,必须要用json_encode生成的才是标准的json格式,我当然很郁闷啦,用了这么多年了,刚知道这...

PHP的json_encode使用分析说明

json的优点就不说了,有个习惯,我在输出json的时候,喜欢用 sprintf 拼成json格式,前两天被朋友说不标准,必须要用json_encode生成的才是标准的json格式,我当然很郁闷啦,用了这么多年了,刚知道这样做不标准,既然说我不标准,那什么才是标准的json格式?代码如下:

{a : 'abc'} {'a' : 'abc'} {a : "abc"} {"a" : "abc"}

谁都知道,只有第四种才是标准的json格式,我这么做,代码如下:

$ret_json='{"%s":"%s"}';echo json_encode($ret_json,"a","abc");

必然也符合标准,既然如此,那我就要刨根问底,json_encode生成的json格式究竟有什么不同?

实例代码如下:

  1. static PHP_FUNCTION(json_encode) 
  2.         zval *parameter; 
  3.         smart_str buf = {0}; 
  4.         long options = 0; 
  5.  
  6.         if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &parameter, &options) == FAILURE) { 
  7.                 return;//开源代码phpfensi.com 
  8.         }   
  9.  
  10.         JSON_G(error_code) = PHP_JSON_ERROR_NONE; 
  11.  
  12.         php_json_encode(&buf, parameter, options TSRMLS_CC); 
  13.  
  14.         ZVAL_STRINGL(return_value, buf.c, buf.len, 1); 
  15.  
  16.         smart_str_free(&buf); 

JSON_G(error_code) = PHP_JSON_ERROR_NONE;

是定义的json错误,该错误可以通过json_last_error函数获取,你用过吗?反正我没用过.

php_json_encode是主要的操作,代码如下:

  1. PHP_JSON_API void php_json_encode(smart_str *buf, zval *val, int options TSRMLS_DC) /* {{{ */ 
  2.         switch (Z_TYPE_P(val)) 
  3.         { 
  4.                 case IS_NULL
  5.                         smart_str_appendl(buf, "null", 4); //输出NULL 
  6.                         break
  7.  
  8.                 case IS_BOOL
  9.                         if (Z_BVAL_P(val)) { 
  10.                                 smart_str_appendl(buf, "true", 4);//输出true 
  11.                         } else { 
  12.                                 smart_str_appendl(buf, "false", 5);//输出false 
  13.                         } 
  14.                         break
  15.  
  16.                 case IS_LONG
  17.                         smart_str_append_long(buf, Z_LVAL_P(val));//输出长整形的值 
  18.                         break
  19.  
  20.                 case IS_DOUBLE
  21.                         { 
  22.                                 char *d = NULL; 
  23.                                 int len; 
  24.                                 double dbl = Z_DVAL_P(val); 
  25.  
  26.                                 if (!zend_isinf(dbl) && !zend_isnan(dbl)) {//非无穷尽 
  27.                                         len = spprintf(&d, 0, "%.*k", (int) EG(precision), dbl); 
  28.                                         smart_str_appendl(buf, d, len); 
  29.                                         efree(d); 
  30.                                 } else { 
  31.                                         php_error_docref(NULL TSRMLS_CC, E_WARNING, "double 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论