php語言的json實現

Lanneret 13年前發布 | 5K 次閱讀 Screensiz.es

由于開發一個ajax file manager for web開源項目,數據交換使用的json格式,后來發現在低版本的php上運行會有問題,仔細調試發現json_decode和json_encode無法正常工作,于是查閱資料,發現低版本的php沒有實現這兩個函數,為了兼容性,我只好自己實現一個php版的json編碼解碼代碼,并保證和json2.js的一致,測試調試并通過,現在將其公布出來,供有相同需求的同學使用:

<?php
/  **

  • $base: $ *
  • $Author: $
  • Berlin Qin *
  • $History: base.js $
  • Berlin Qin 2011/5/15 created *
  • $contacted
  • webfmt@gmail.com
  • www.webfmt.com *
  • *** / / ===========================================================================
  • license *
  • 1、Open Source Licenses
  • webfmt is distributed under the GPL, LGPL and MPL open source licenses.
  • This triple copyleft licensing model avoids incompatibility with other open source licenses.
  • These Open Source licenses are specially indicated for:
  • Integrating webfmt into Open Source software;
  • Personal and educational use of webfmt;
  • Integrating webfmt in commercial software,
  • taking care of satisfying the Open Source licenses terms,
  • while not able or interested on supporting webfmt and its development. *
  • 2、Commercial License – fbis source Closed Distribution License - CDL
  • For many companies and products, Open Source licenses are not an option.
  • This is why the fbis source Closed Distribution License (CDL) has been introduced.
  • It is a non-copyleft license which gives companies complete freedom
  • when integrating webfmt into their products and web sites.
  • This license offers a very flexible way to integrate webfmt in your commercial application.
  • These are the main advantages it offers over an Open Source license:
  • Modifications and enhancements doesn't need to be released under an Open Source license;
  • There is no need to distribute any Open Source license terms alongside with your product
  • and no reference to it have to be done;
  • No references to webfmt have to be done in any file distributed with your product;
  • The source code of webfmt doesn’t have to be distributed alongside with your product;
  • You can remove any file from webfmt when integrating it with your product.
  • The CDL is a lifetime license valid for all releases of webfmt published during
  • and before the year following its purchase.
  • It's valid for webfmt releases also. It includes 1 year of personal e-mail support. *
  • * */

function jsonDecode($json) { $result = array(); try { if (PHP_VERSION_ID > 50300) { $result = (array) json_decode($json); } else { $json = str_replace(array("\\", "\\""), array("&#92;", "&#34;"), $json); $parts = preg_split("@(\"[^\"]*\")|([[]{},:])|\s@is", $json, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); foreach ($parts as $index => $part) { if (strlen($part) == 1) { switch ($part) { case "[": case "{": $parts[$index] = "array("; break; case "]": case "}": $parts[$index] = ")"; break; case ":": $parts[$index] = "=>"; break; case ",": break; default: break; } } } $json = str_replace(array("&#92;", "&#34;", "$"), array("\\", "\\"", "\$"), implode("", $parts)); $result = eval("return $json;"); } } catch (Exception $e) { $result = array("error" => $e->getCode()); } return $result; }

function valueTostr($val) { if (is_string($val)) { $val = str_replace('\"', "\\"", $val); $val = str_replace("\", "\\", $val); $val = str_replace("/", "\/", $val); $val = str_replace("\t", "\t", $val); $val = str_replace("\n", "\n", $val); $val = str_replace("\r", "\r", $val); $val = str_replace("\b", "\b", $val); $val = str_replace("\f", "\f", $val); return '"' . $val . '"'; } elseif (is_int($val)) return sprintf('%d', $val); elseif (is_float($val)) return sprintf('%F', $val); elseif (is_bool($val)) return ($val ? 'true' : 'false'); else return 'null'; }

function jsonEncode($arr) { $result = "{}"; try { if (PHP_VERSION_ID > 50300) { $result = json_encode($arr); } else { $parts = array(); $is_list = false; if (!is_array($arr)) { $arr = (array) $arr; } $end = count($arr) - 1; if (count($arr) > 0) { if (is_numeric(key($arr))) { $result = "[";
for ($i = 0; $i < count($arr); $i++) { if (is_array($arr[$i])) { $result = $result . jsonEncode($arr[$i]); } else { $result = $result . valueTostr($arr[$i]); } if ($i != $end) { $result = $result . ","; } } $result = $result . "]"; } else { $result = "{"; $i = 0; foreach ($arr as $key => $value) { $result = $result . '"' . $key . '":'; if (is_array($value)) { $result = $result . jsonEncode($value); } else { $result = $result . valueTostr($value); } if ($i != $end) { $result = $result . ","; } $i++; } $result = $result . "}"; } } else { $result = "[]"; } } } catch (Exception $e) {

}
return $result;

} ?></pre>如果使用過程有什么問題,可以給我email.歡迎大家指出錯誤!</div>

 本文由用戶 Lanneret 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
寫博客

博客分類