芒果小站

  1. 全球最具业界良心的主机 - Linode

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - Linode

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - Linode

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
7

分享一个 PHP 版的 JSON 数据格式化函数

作者 芒果/分类 代码/发布于 2012-07-05 14:09

将字符串形式的 JSON 数据格式化为缩进形式。通常使用 json_encode 转换出来的 JSON 串没有缩进,有这个方法就爽多了。
这里我默认使用了 tab 缩进,如果要改成空格,替换变量 $indentStr 即可。

	/**
	 * Indents a flat JSON string to make it more human-readable.
	 * @param string $json The original JSON string to process.
	 * @return string Indented version of the original JSON string.
	 */
	function indent ($json) {

		$result = '';
		$pos = 0;
		$strLen = strlen($json);
		$indentStr = '	';
		$newLine = "\n";
		$prevChar = '';
		$outOfQuotes = true;

		for ($i=0; $i<=$strLen; $i++) {

			// Grab the next character in the string.
			$char = substr($json, $i, 1);
			// Are we inside a quoted string?
			if ($char == '"' && $prevChar != '\\') {
				$outOfQuotes = !$outOfQuotes;
				// If this character is the end of an element,
				// output a new line and indent the next line.
			} else if(($char == '}' || $char == ']') && $outOfQuotes) {
				$result .= $newLine;
				$pos --;
				for ($j=0; $j<$pos; $j++) {
					$result .= $indentStr;
				}
			}
			// Add the character to the result string.
			$result .= $char;
			// If the last character was the beginning of an element,
			// output a new line and indent the next line.
			if (($char == ',' || $char == '{' || $char == '[') && $outOfQuotes) {
				$result .= $newLine;
				if ($char == '{' || $char == '[') {
					$pos ++;
				}
				for ($j = 0; $j < $pos; $j++) {
					$result .= $indentStr;
				}
			}
			$prevChar = $char;
		}

		return $result;

	}
版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/share-a-php-version-of-the-json-data-format-function/" title="分享一个 PHP 版的 JSON 数据格式化函数" rel="bookmark">分享一个 PHP 版的 JSON 数据格式化函数 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 7 条群众意见

  1. 软件盒子 /2012-07-05 16:17

    我来杀个花 回应

    #1
  2. 流水线 /2012-07-06 15:48

    博主大爱,收下了 回应

    #2
  3. Karl Weng /2012-07-06 22:44

    嗯,俺表示我越来越看不懂了… 回应

    #3
  4. cheap insurance plans /2012-07-08 14:51

    哎 看到的又是一串代码啊 回应

    #4
  5. 珠宝网站 /2012-07-09 09:21

    看到代码,我就想睡觉 回应

    #5
  6. 小东别院 /2012-07-20 09:46

    完全看不明白了,越来越没得看代码的眼神佬。都跟神马传说一样。 回应

    #6
  7. 163llk /2012-08-29 22:36

    呵呵,版本 很清爽。。 回应

    #7

下面我简单说几句