PHP で JSON を出力する

保守しているサーバーの PHP は、なんとバージョン 5.2.2 という生きる化石のようなシロモノでした。
一応 json_encode 関数はあるのですが、JSON_PRITTY_PRINT や JSON_UNESCAPED_UNICODE オプションが使えないため、とても人間が読みやすいものは出力できません。

じゃあ、どうしようか?
まぁ1時間ぐらいで自作出来るんじゃないの?

と、作ったわずか40行程の関数です。

よかったら使って下さい。

function json_print( $data, $indent=0, $next='' ) {
	if ( ! is_array( $data ) ) {
		if ( is_bool( $data ) ) {
			printf( "%s%s\n", $data ? 'true': 'false', $next );
			return;
		}

		if ( is_numeric( $data ) ) {
			printf( "%s%s\n", $data, $next );
			return;
		}

		printf( "\"%s\"%s\n", preg_replace( '/\\n/', '\\n', preg_replace( '/"/', '\\"', $data ) ), $next );
		return;
	}

	if ( array_values( $data ) === $data ) {
		printf( "[\n" );

		for ( $n = 0; $n < count( $data ); $n++ ) {
			printf( str_repeat( ' ', ( $indent  + 1 ) * 4 ) );
			json_print( $val, $indent + 1, ( $n == ( count( $data ) - 1 ) ) ? '' : ',' );
		}

		printf( "%s]%s\n", str_repeat( ' ', $indent * 4 ), $next );
		return;
	}

	printf( "{\n", str_repeat( ' ', $indent * 4 ) );

	$keys = array_keys( $data );

	for ( $n = 0; $n < count( $keys ); $n++ ) {
		printf( "%s\"%s\" : ", str_repeat( ' ', ( $indent  + 1 ) * 4 ), $keys[ $n ] );
		json_print( $data[ $keys[ $n ] ], $indent + 1, ( $n == ( count( $keys ) - 1 ) ) ? '' : ',' );
	}

	printf( "%s}%s\n", str_repeat( ' ', $indent * 4 ), $next );
}

使い方はこれだけです。

json_print( $data );

コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください