设为首页 收藏本站
查看: 672|回复: 0

[经验分享] php json encode decode

[复制链接]

尚未签到

发表于 2017-3-24 12:14:08 | 显示全部楼层 |阅读模式
  对于老的php版本是没有json_encode 和json_decode函数的,但是又想使用这个功能。下边就是一个用php代码写的json encode 和decode 的函数。
  function fromJSON ( $json, $assoc = false ) {
  /* by default we don't tolerate ' as string delimiters
  if you need this, then simply change the comments on
  the following lines: */
  $matchString = '/(".*?(?<!\\\\)"|\'.*?(?<!\\\\)\')/';
  //$matchString = '/".*?(?<!\\\\)"/';
  // safety / validity test
  $t = preg_replace( $matchString, '', $json );
  $t = preg_replace( '/[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/', '', $t );
  if ($t != '') { return null; }
  // build to/from hashes for all strings in the structure
  $s2m = array();
  $m2s = array();
  preg_match_all( $matchString, $json, $m );
  foreach ($m[0] as $s) {
  $hash       = '"' . md5( $s ) . '"';
  $s2m[$s]    = $hash;
  $m2s[$hash] = str_replace( '$', '\$', $s );  // prevent $ magic
  }
  // hide the strings
  $json = strtr( $json, $s2m );
  // convert JS notation to PHP notation
  $a = ($assoc) ? '' : '(object) ';
  $json = strtr( $json, 
  array(
  ':' => '=>', 
  '[' => 'array(', 
  '{' => "{$a}array(", 
  ']' => ')', 
  '}' => ')'
  ) 
  );
  // remove leading zeros to prevent incorrect type casting
  $json = preg_replace( '~([\s\(,>])(-?)0~', '$1$2', $json );
  // return the strings
  $json = strtr( $json, $m2s );
  /* "eval" string and return results. 
  As there is no try statement in PHP4, the trick here 
  is to suppress any parser errors while a function is 
  built and then run the function if it got made. */
  $f = @create_function( '', "return {$json};" );
  $r = ($f) ? $f() : null;
  // free mem (shouldn't really be needed, but it's polite)
  unset( $s2m ); unset( $m2s ); unset( $f );
  return $r;
  }
  /**
  * Encodes a PHP variable into a JSON string.
  * @param mixed $value A PHP variable to be encoded.
  */
  function toJSON ( $value ) {
  if ($value === null) { return 'null'; };  // gettype fails on null?
  $out = '';
  $esc = "\"\\/\n\r\t" . chr( 8 ) . chr( 12 );  // escaped chars
  $l   = '.';  // decimal point
  switch ( gettype( $value ) ) 
  {
  case 'boolean':
  $out .= $value ? 'true' : 'false';
  break;
  case 'float':
  case 'double':
  // PHP uses the decimal point of the current locale but JSON expects %x2E
  $l = localeconv();
  $l = $l['decimal_point'];
  // fallthrough...
  case 'integer':
  $out .= str_replace( $l, '.', $value );  // what, no getlocale?
  break;
  case 'array':
  // if array only has numeric keys, and is sequential... ?
  for ($i = 0; ($i < count( $value ) && isset( $value[$i]) ); $i++);
  if ($i === count($value)) {
  // it's a "true" array... or close enough
  $out .= '[' . implode(',', array_map('toJSON', $value)) . ']';
  break;
  }
  // fallthrough to object for associative arrays... 
  case 'object':
  $arr = is_object($value) ? get_object_vars($value) : $value;
  $b = array();
  foreach ($arr as $k => $v) {
  $b[] = '"' . addcslashes($k, $esc) . '":' . toJSON($v);
  }
  $out .= '{' . implode( ',', $b ) . '}';
  break;
  default:  // anything else is treated as a string
  return '"' . addcslashes($value, $esc) . '"';
  break;
  }
  return $out;
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354647-1-1.html 上篇帖子: php生成CSV格式 下篇帖子: 你到底懂得多少PHP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表