Php希望以json格式输出
Php希望以json格式输出
我正在构建一个PHP脚本,将JSON数据提供给另一个脚本。我的脚本将数据构建成一个大的关联数组,然后使用json_encode
输出数据。下面是一个示例脚本:
$data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip'); header('Content-type: text/javascript'); echo json_encode($data);
上面的代码会产生以下输出:
{"a":"apple","b":"banana","c":"catnip"}
如果你有大量的数据,那么这样做很棒,但我更喜欢以下方式:
{ "a": "apple", "b": "banana", "c": "catnip" }
有没有一种在PHP中不需要丑陋的hack来实现这一点的方法?看起来像Facebook的某个人已经想出来了。
admin 更改状态以发布 2023年5月20日
这个函数将会把JSON字符串缩进,使它变得非常易读。它也应该是可收敛的,
prettyPrint( $json ) === prettyPrint( prettyPrint( $json ) )
输入
{"key1":[1,2,3],"key2":"value"}
输出
{ "key1": [ 1, 2, 3 ], "key2": "value" }
代码
function prettyPrint( $json ) { $result = ''; $level = 0; $in_quotes = false; $in_escape = false; $ends_line_level = NULL; $json_length = strlen( $json ); for( $i = 0; $i < $json_length; $i++ ) { $char = $json[$i]; $new_line_level = NULL; $post = ""; if( $ends_line_level !== NULL ) { $new_line_level = $ends_line_level; $ends_line_level = NULL; } if ( $in_escape ) { $in_escape = false; } else if( $char === '"' ) { $in_quotes = !$in_quotes; } else if( ! $in_quotes ) { switch( $char ) { case '}': case ']': $level--; $ends_line_level = NULL; $new_line_level = $level; break; case '{': case '[': $level++; case ',': $ends_line_level = $level; break; case ':': $post = " "; break; case " ": case "\t": case "\n": case "\r": $char = ""; $ends_line_level = $new_line_level; $new_line_level = NULL; break; } } else if ( $char === '\\' ) { $in_escape = true; } if( $new_line_level !== NULL ) { $result .= "\n".str_repeat( "\t", $new_line_level ); } $result .= $char.$post; } return $result; }
PHP 5.4提供了JSON_PRETTY_PRINT
选项,可与json_encode()
调用一起使用。
https://php.net/manual/en/function.json-encode.php