Thứ Tư, 2 tháng 10, 2013

PHP: Xuất chuối JSON đẹp mắt

Lấn sân sang Web một chút :3 Hôm nay mình sẽ hướng dẫn các bạn một mẹo nhỏ để xuất chuỗi JSON đẹp mắt (Có thụt hàng lớp lang này nọ).
Giả sử ta có cần xuất mảng data sau ra chuỗi JSON: 
$data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip'); 
Với cách thông thường là 
echo json_encode($data); 
Ta chỉ thu được 
{"a":"apple","b":"banana","c":"catnip"}
Để thu được đoạn JSON đẹp hơn
{
    "a": "apple",
    "b": "banana",
    "c": "catnip"
}
Ta có 2 cách :D
Cách 1: Dùng hàm có sẵn của PHP 5.4
echo json_encode($data, JSON_PRETTY_PRINT);
Cách 2: Tự viết hàm để xuất :x (Tham khảo Format JSON With PHP)

/**
 * 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;
}
 
Cách sử dụng:
echo indent(json_encode($data));
Chúc các bạn thành công.

2 nhận xét: