পিএইচপি সহ সুন্দর-প্রিন্টিং জেএসওএন


587

আমি একটি PHP স্ক্রিপ্ট তৈরি করছি যা অন্য স্ক্রিপ্টে JSON ডেটা ফিড করে eds আমার স্ক্রিপ্ট ডেটাটি একটি বড় এসোসিয়েটিভ অ্যারেতে তৈরি করে এবং তারপরে ডেটা আউটপুট করে 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"}

আপনার যদি অল্প পরিমাণে ডেটা থাকে তবে এটি দুর্দান্ত but তবে আমি এই লাইনের সাথে কিছু পছন্দ করব:

{
    "a": "apple",
    "b": "banana",
    "c": "catnip"
}

কুরুচিপূর্ণ হ্যাক ছাড়া পিএইচপি-তে এটি করার কোনও উপায় আছে কি? দেখে মনে হচ্ছে ফেসবুকে কেউ এটি আবিষ্কার করেছেন।


26
5.4 সামনে পিএইচপি জন্য, আপনি ফলব্যাক ব্যবহার করতে পারেন upgradephp যেমনup_json_encode($data, JSON_PRETTY_PRINT);
মারিও

6
শিরোনামের ব্যবহার ('বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / জেসন'); ব্রাউজারটি সুন্দর মুদ্রণ করে
পার্থো

4
জুলাই 2018 হিসাবে, কেবল Content-Type: application/jsonফায়ারফক্স শিরোনাম প্রেরণের মাধ্যমে ফলাফলটি তার নিজস্ব অভ্যন্তরীণ JSON পার্সার ব্যবহার করে দেখাবে, যখন ক্রোম সরল পাঠ্যটি দেখায়। +1 ফায়ারফক্স!
andreszs

উত্তর:


1126

পিএইচপি 5.4 কলটি JSON_PRETTY_PRINTব্যবহারের জন্য বিকল্প সরবরাহ করে json_encode()

http://php.net/manual/en/function.json-encode.php

<?php
...
$json_string = json_encode($data, JSON_PRETTY_PRINT);

33
ধন্যবাদ, এটি এখনই করার সেরা উপায়। যদিও এই প্রশ্নটি জিজ্ঞাসা করার সময় আমার পিএইচপি 5.4 ছিল না ...
জ্যাচ রেটনার

9
5.5.3 এখানে, কেবল অক্ষরগুলির মধ্যে কিছুটা ফাঁক ফাঁক যোগ করার চেষ্টা করা হয়েছে, কোনও আসল ইনডেন্টিং নয়।

35
জেএসএন-তে এইচটিএমএল লাইন ব্রেক রয়েছে বলে মনে করা হচ্ছে না, তবে নতুন লাইনের অক্ষরগুলি JSON এ বৈধ। আপনি যদি কোনও ওয়েব পৃষ্ঠায় JSON প্রদর্শন করতে চান তবে নিজেই নতুন লাইনের চরিত্রগুলিতে একটি স্ট্রিং প্রতিস্থাপন করুন বা অন্যথায় একটি <pre> ... </ translation> উপাদানটিতে JSON রাখুন। সিনট্যাক্স রেফারেন্সের জন্য json.org দেখুন ।
একিলি

13
Content-Typeআপনি application/jsonযদি ব্রাউজারটি সুন্দর-মুদ্রিত JSON সুন্দরভাবে প্রদর্শন করতে চান তবে প্রতিক্রিয়া সেট করতে ভুলবেন না ।
পাইজুসন

6
@ অ্যাকাউন্টফ্লোরটাইলস এটি সরাসরি কাজ করবে না আপনি নিজের আউটপুট <pre>ট্যাগের মতো লাগাতে হবে যেমন<?php ... $json_string = json_encode($data, JSON_PRETTY_PRINT); echo "<pre>".$json_string."<pre>";
সালমান মোহাম্মদ

187

এই ফাংশনটি JSON স্ট্রিং নেবে এবং এটি খুব পাঠযোগ্য ind এটিও অভিভাবক হওয়া উচিত,

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;
}

84

অনেক ব্যবহারকারী আপনার ব্যবহারের পরামর্শ দিয়েছেন

echo json_encode($results, JSON_PRETTY_PRINT);

যা একেবারে ঠিক। তবে এটি যথেষ্ট নয়, ব্রাউজারটি ডেটার ধরণটি বুঝতে হবে, আপনি ব্যবহারকারীকে ডেটা ইকো-ইনগ্রেড করার ঠিক আগে হেডারটি নির্দিষ্ট করতে পারেন specify

header('Content-Type: application/json');

এটি একটি ভাল ফর্ম্যাট আউটপুট ফলাফল করবে।

অথবা, আপনি যদি এক্সটেনশানগুলি পছন্দ করেন তবে আপনি ক্রমের জন্য জেএসএনভিউ ব্যবহার করতে পারেন।


3
কেবলমাত্র শিরোলেখ সেট করুন এবং ফায়ারফক্স এটি নিজস্ব অভ্যন্তরীণ JSON ডিবাগিং পার্সার ব্যবহার করে একে একে নিখুঁতভাবে দেখাবে, জেএসএএন বিষয়বস্তুগুলিকে স্পর্শ করার দরকার নেই! ধন্যবাদ!!
andreszs

1
ক্রোমেও কাজ করে। ধন্যবাদ।
ডন দিলঙ্গা

41

আমারও একই প্রশ্ন ছিল.

যাইহোক আমি এখানে স্রেফ জসন ফর্ম্যাটিং কোডটি ব্যবহার করেছি:

http://recursive-design.com/blog/2008/03/11/format-json-with-php/

আমার যা প্রয়োজন তার জন্য ভাল কাজ করে।

এবং আরও রক্ষণাবেক্ষণ করা সংস্করণ: https://github.com/GerHobbelt/nicejson-php


আমি github.com/GerHobbelt/nicejson-php চেষ্টা করেছি এবং এটি পিএইচপি 5.3-এ দুর্দান্ত কাজ করে।
অধ্যাপক ফ্যালকেন চুক্তি

1
আপনি যদি পিএইচপি 7.0 (এবং উপরের) তে থাকেন এবং এখনও কাস্টম ইনডেন্টেশন সহ জেএসওএনকে প্রিন্ট করতে চান, লোকালইইনজ . com / blog / 2018 / 01 / 04/… সহায়তা করা উচিত।
লোকালহেইঞ্জ

40

আমি বুঝতে পেরেছি যে এই প্রশ্নটি কীভাবে একটি চমত্কার-ফর্ম্যাটেড JSON স্ট্রিংয়ে কোনও এসোসিয়েটিভ অ্যারে এনকোড করবেন সে সম্পর্কে জিজ্ঞাসা করছে, সুতরাং এটি সরাসরি প্রশ্নের উত্তর দেয় না, তবে আপনার যদি ইতিমধ্যে JSON ফর্ম্যাটে থাকা একটি স্ট্রিং থাকে তবে আপনি এটিকে খুব সহজ করে তুলতে পারেন এটিকে ডিকোডিং এবং পুনরায় এনকোডিং করে (পিএইচপি> = 5.4 প্রয়োজন):

$json = json_encode(json_decode($json), JSON_PRETTY_PRINT);

উদাহরণ:

header('Content-Type: application/json');
$json_ugly = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$json_pretty = json_encode(json_decode($json_ugly), JSON_PRETTY_PRINT);
echo $json_pretty;

এই ফলাফলগুলি:

{
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
}

ধন্যবাদ, কেবলমাত্র যদি আমি এটিকে পিএইচপি ব্লকের শীর্ষে যুক্ত করি ... হেডার ('বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / জেসন');
ডায়াল্ডিন

2
@ ডিয়েএলডিন আপনি যদি এই শিরোলেখটি ব্যবহার না করেন, পিএইচপি ব্রাউজারকে বলবে যে এটি এইচটিএমএল প্রেরণ করছে, সুতরাং আপনাকে ফর্ম্যাট করা JSON স্ট্রিংটি দেখতে পৃষ্ঠা উত্সটি দেখতে হবে। আমি ধরে নিলাম যে বোঝা গেছে, তবে আমি অনুমান করি না। আমি আমার উত্তরে এটি যুক্ত করেছি।
মাইক 15

এবং যে কেউ ইউনিক্স / লিনাক্স শেলটিতে লগ / ফাইলটি টেলিং / পর্যালোচনা করছে, এটিই এখানে সমাধান! @ মাইক, ভাল খুঁজছেন এটি পড়া সহজ করে তোলে !.
ফিউশন 27

@ ফিউশন27 আপনি কোন লগ ফাইলগুলি উল্লেখ করছেন তা আমি সত্যিই নিশ্চিত নই। আমি JSON- এ কোনও লগইন করে এমন কোনও প্রোগ্রামের কথা শুনিনি।
মাইক

@ মাইক, এটি একটি দ্রুত-অ-নোংরা পিএইচপি আমি অনুরোধ বডি (যা একটি সিরিয়ালযুক্ত জেএসওন স্ট্রিং) সংযুক্ত করে আমার পিএইচপিটিতে একটি পাঠ্য ফাইলে পোস্ট করেছি, আমি তখন এটি ইউনিক্স শেলের মধ্যে রেখেছি যাতে আমি লাইভ পোষ্টগুলি দেখতে পারি। আমি আপনার কৌশলটি ফর্ম্যাট করতে ব্যবহার করছি যে পাঠ্য ফাইলটি আরও ব্যবহারযোগ্য করে তোলে J
ফিউশন 27

24

বেশ কয়েকটি উত্তর একসাথে বিদ্যমান জসনের জন্য আমার প্রয়োজনের সাথে খাপ খায়:

Code:
echo "<pre>"; 
echo json_encode(json_decode($json_response), JSON_PRETTY_PRINT); 
echo "</pre>";

Output:
{
    "data": {
        "token_type": "bearer",
        "expires_in": 3628799,
        "scopes": "full_access",
        "created_at": 1540504324
    },
    "errors": [],
    "pagination": {},
    "token_type": "bearer",
    "expires_in": 3628799,
    "scopes": "full_access",
    "created_at": 1540504324
}

3
এটি করার জন্য এখানে একটি ছোট্ট মোড়কের কার্যকারিতা রয়েছে:function json_print($json) { return '<pre>' . json_encode(json_decode($json), JSON_PRETTY_PRINT) . '</pre>'; }
ড্যানি বেকেট

11

আমি সুরকারের কাছ থেকে কোডটি নিয়েছি: https://github.com/composer/composer/blob/master/src/Composer/Json/JsonFile.php এবং nicejson: https://github.com/GerHobbelt/nicejson-php/blob /master/nicejson.php সুরকার কোডটি ভাল কারণ এটি সাবলীলভাবে 5.3 থেকে 5.4 অবধি আপডেট হয় তবে এটি কেবলমাত্র বস্তুটিকে এনকোড করে যেখানে ডিজজান জসন স্ট্রিংগুলি গ্রহণ করে, তাই আমি সেগুলিকে একীভূত করেছিলাম। কোডটি জসন স্ট্রিং এবং / অথবা এনকোড অবজেক্টগুলিকে ফর্ম্যাট করতে ব্যবহার করা যেতে পারে, আমি বর্তমানে এটি একটি দ্রুপাল মডিউলে ব্যবহার করছি।

if (!defined('JSON_UNESCAPED_SLASHES'))
    define('JSON_UNESCAPED_SLASHES', 64);
if (!defined('JSON_PRETTY_PRINT'))
    define('JSON_PRETTY_PRINT', 128);
if (!defined('JSON_UNESCAPED_UNICODE'))
    define('JSON_UNESCAPED_UNICODE', 256);

function _json_encode($data, $options = 448)
{
    if (version_compare(PHP_VERSION, '5.4', '>='))
    {
        return json_encode($data, $options);
    }

    return _json_format(json_encode($data), $options);
}

function _pretty_print_json($json)
{
    return _json_format($json, JSON_PRETTY_PRINT);
}

function _json_format($json, $options = 448)
{
    $prettyPrint = (bool) ($options & JSON_PRETTY_PRINT);
    $unescapeUnicode = (bool) ($options & JSON_UNESCAPED_UNICODE);
    $unescapeSlashes = (bool) ($options & JSON_UNESCAPED_SLASHES);

    if (!$prettyPrint && !$unescapeUnicode && !$unescapeSlashes)
    {
        return $json;
    }

    $result = '';
    $pos = 0;
    $strLen = strlen($json);
    $indentStr = ' ';
    $newLine = "\n";
    $outOfQuotes = true;
    $buffer = '';
    $noescape = 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 && $noescape)
        {
            $outOfQuotes = !$outOfQuotes;
        }

        if (!$outOfQuotes)
        {
            $buffer .= $char;
            $noescape = '\\' === $char ? !$noescape : true;
            continue;
        }
        elseif ('' !== $buffer)
        {
            if ($unescapeSlashes)
            {
                $buffer = str_replace('\\/', '/', $buffer);
            }

            if ($unescapeUnicode && function_exists('mb_convert_encoding'))
            {
                // http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha
                $buffer = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
                    function ($match)
                    {
                        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
                    }, $buffer);
            } 

            $result .= $buffer . $char;
            $buffer = '';
            continue;
        }
        elseif(false !== strpos(" \t\r\n", $char))
        {
            continue;
        }

        if (':' === $char)
        {
            // Add a space after the : character
            $char .= ' ';
        }
        elseif (('}' === $char || ']' === $char))
        {
            $pos--;
            $prevChar = substr($json, $i - 1, 1);

            if ('{' !== $prevChar && '[' !== $prevChar)
            {
                // If this character is the end of an element,
                // output a new line and indent the next line
                $result .= $newLine;
                for ($j = 0; $j < $pos; $j++)
                {
                    $result .= $indentStr;
                }
            }
            else
            {
                // Collapse empty {} and []
                $result = rtrim($result) . "\n\n" . $indentStr;
            }
        }

        $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)
        {
            $result .= $newLine;

            if ('{' === $char || '[' === $char)
            {
                $pos++;
            }

            for ($j = 0; $j < $pos; $j++)
            {
                $result .= $indentStr;
            }
        }
    }
    // If buffer not empty after formating we have an unclosed quote
    if (strlen($buffer) > 0)
    {
        //json is incorrectly formatted
        $result = false;
    }

    return $result;
}

এই তার কাজ হল কিভাবে! দেশীয় উপলব্ধ না হলে কেবলমাত্র নিজস্ব বাস্তবায়ন চলে। আপনি যদি নিশ্চিত হন যে আপনার কোডটি কেবলমাত্র PHP 5.4 বা তার বেশি চলবে আপনি JSON_PRETTY_PRINT
হেরোসেলহিম

এই সমাধানটি আমাকে ত্রুটি দেয় (পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত T_FUNCTION) লাইন ফাংশনে ($ ম্যাচ)
ARLab

রচয়িতা থেকে এটা গ্রহণ daveperrett.com/articles/2008/03/11/format-json-with-php , যা হিসাবে একই stackoverflow.com/a/6054389/1172545
লোকালহেইঞ্জ

10

আপনি যদি ফায়ারফক্সে থাকেন তবে JSONovich ইনস্টল করুন । সত্যই আমি জানি কোনও পিএইচপি সমাধান নয়, তবে এটি উন্নয়নের উদ্দেশ্যে / ডিবাগিংয়ের কৌশলটি করে।


3
আমি মনে করি এটি এপিআই করার সময় এটির সঠিক সমাধান। এটি উভয় বিশ্বের সেরা দেয়, সহজ ডিবাগিং যেহেতু আপনি সমস্ত কিছু পড়তে পারেন এবং আপনি এর কর্মক্ষমতা সহ ব্যাকেন্ডস আচরণটি পরিবর্তন করছেন না।
ড্যানিয়েল

সম্মত, এটি রঙের সাথে দুর্দান্তভাবে ফর্ম্যাট হয়েছে এবং খুব সঙ্কুচিত। আপনি পিএইচপি কিছুটা দিয়ে অর্জনের আশা করতে পারেন তার চেয়েও সুন্দর
ম্যাথু লক

10

আমি এটি ব্যবহার করেছি:

echo "<pre>".json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)."</pre>";

বা পিএইচপি শিরোনাম নীচের হিসাবে ব্যবহার করুন:

header('Content-type: application/json; charset=UTF-8');
echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

8

পিএইচপি> 5.4 এর সহজ উপায়: ফেসবুক গ্রাফের মতো

$Data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip');
$json= json_encode($Data, JSON_PRETTY_PRINT);
header('Content-Type: application/json');
print_r($json);

ব্রাউজারে ফলাফল

{
    "a": "apple",
    "b": "banana",
    "c": "catnip"
}

@ ম্যাডব্র্যাকস, এটি পিএইচপি ফাইলে ভাল প্রিন্ট করে, ফেসবুকের মতো জেসন ফাইলে লেখার দরকার নেই।
dknepa

6

বিকল্প এবং এর <pre>সাথে একত্রে ব্যবহার করুন :json_encode()JSON_PRETTY_PRINT

<pre>
    <?php
    echo json_encode($dataArray, JSON_PRETTY_PRINT);
    ?>
</pre>

6

আপনার যদি বিদ্যমান জেএসএন ( $ugly_json) থাকে

echo nl2br(str_replace(' ', '&nbsp;', (json_encode(json_decode($ugly_json), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES))));

5

রঙ সম্পূর্ণ আউটপুট আছে: ক্ষুদ্র সমাধান

কোড:

$s = '{"access": {"token": {"issued_at": "2008-08-16T14:10:31.309353", "expires": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcIegeyJpc3N1ZWRfYXQiOiAi"}, "serviceCatalog": [], "user": {"username": "ajay", "roles_links": [], "id": "16452ca89", "roles": [], "name": "ajay"}}}';

$crl = 0;
$ss = false;
echo "<pre>";
for($c=0; $c<strlen($s); $c++)
{
    if ( $s[$c] == '}' || $s[$c] == ']' )
    {
        $crl--;
        echo "\n";
        echo str_repeat(' ', ($crl*2));
    }
    if ( $s[$c] == '"' && ($s[$c-1] == ',' || $s[$c-2] == ',') )
    {
        echo "\n";
        echo str_repeat(' ', ($crl*2));
    }
    if ( $s[$c] == '"' && !$ss )
    {
        if ( $s[$c-1] == ':' || $s[$c-2] == ':' )
            echo '<span style="color:#0000ff;">';
        else
            echo '<span style="color:#ff0000;">';
    }
    echo $s[$c];
    if ( $s[$c] == '"' && $ss )
        echo '</span>';
    if ( $s[$c] == '"' )
          $ss = !$ss;
    if ( $s[$c] == '{' || $s[$c] == '[' )
    {
        $crl++;
        echo "\n";
        echo str_repeat(' ', ($crl*2));
    }
}
echo $s[$c];

এটিতে বেশ কয়েকটি ত্রুটি থাকলেও এটি খুব সহায়ক ছিল। আমি সেগুলি স্থির করেছি এবং এখন এটি একটি কবজির মতো কাজ করে, এবং ফাংশনটি মোটেও বড় নয়! ধন্যবাদ অজয়
ড্যানিয়েল

কেউ যদি এটি ব্যবহার করতে চায় তবে কেবলমাত্র ঠিকঠাক মন্তব্য করতে ... দ্বিতীয়টিতে এবং তৃতীয় শর্তে একটি বৈধতা যাচাই করুন <সি> 1 যুক্ত করুন, এবং শেষ প্রতিধ্বনিটি যদি একটি ইস_আরে () গুলি) এর মধ্যে আবৃত থাকে তবে। এটিতে এটি আবরণ করা উচিত এবং আপনার কোনও আনইনিটালাইজড স্ট্রিং অফসেট ত্রুটি পাওয়া উচিত নয়।
ড্যানিয়েল

5

নীচে একটি জসন স্ট্রিংটি পেরিয়ে একটি সুন্দর পরিষ্কার চেহারা এবং সুন্দরভাবে ইন্টেন্টেড প্রিন্টআউট পেতে আপনি সুইড স্টেটমেন্টে কেন্ডল হপকিন্সের উত্তরটি কিছুটা সংশোধন করতে পারেন:

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;
                $char.="<br>";
                for($index=0;$index<$level-1;$index++){$char.="-----";}
                break;

            case '{': case '[':
                $level++;
                $char.="<br>";
                for($index=0;$index<$level;$index++){$char.="-----";}
                break;
            case ',':
                $ends_line_level = $level;
                $char.="<br>";
                for($index=0;$index<$level;$index++){$char.="-----";}
                break;

            case ':':
                $post = " ";
                break;

            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;
}

echo "RESULTS ARE: <br><br>$result";
return $result;

}

এখন কেবল সুন্দর মুদ্রণ ($ আপনার_জসন_স্ট্রিং) ফাংশনটি চালান; আপনার পিএইচপি ইনলাইন এবং প্রিন্টআউট উপভোগ করুন। আপনি যদি ন্যূনতমতাবাদী হন এবং কোনও কারণে বন্ধনী পছন্দ না করেন তবে শীর্ষস্থানীয় তিনটি সুইচের ক্ষেত্রে $ চরের $char.="<br>";সাথে প্রতিস্থাপন করে $char="<br>";আপনি সেগুলি থেকে সহজেই মুক্তি পেতে পারেন । ক্যালগারি শহরের জন্য গুগল ম্যাপস এপিআই কল করার জন্য আপনি যা পান তা এখানে

RESULTS ARE: 

{
- - - "results" : [
- - -- - - {
- - -- - -- - - "address_components" : [
- - -- - -- - -- - - {
- - -- - -- - -- - -- - - "long_name" : "Calgary"
- - -- - -- - -- - -- - - "short_name" : "Calgary"
- - -- - -- - -- - -- - - "types" : [
- - -- - -- - -- - -- - -- - - "locality"
- - -- - -- - -- - -- - -- - - "political" ]
- - -- - -- - -- - - }
- - -- - -- - -
- - -- - -- - -- - - {
- - -- - -- - -- - -- - - "long_name" : "Division No. 6"
- - -- - -- - -- - -- - - "short_name" : "Division No. 6"
- - -- - -- - -- - -- - - "types" : [
- - -- - -- - -- - -- - -- - - "administrative_area_level_2"
- - -- - -- - -- - -- - -- - - "political" ]
- - -- - -- - -- - - }
- - -- - -- - -
- - -- - -- - -- - - {
- - -- - -- - -- - -- - - "long_name" : "Alberta"
- - -- - -- - -- - -- - - "short_name" : "AB"
- - -- - -- - -- - -- - - "types" : [
- - -- - -- - -- - -- - -- - - "administrative_area_level_1"
- - -- - -- - -- - -- - -- - - "political" ]
- - -- - -- - -- - - }
- - -- - -- - -
- - -- - -- - -- - - {
- - -- - -- - -- - -- - - "long_name" : "Canada"
- - -- - -- - -- - -- - - "short_name" : "CA"
- - -- - -- - -- - -- - - "types" : [
- - -- - -- - -- - -- - -- - - "country"
- - -- - -- - -- - -- - -- - - "political" ]
- - -- - -- - -- - - }
- - -- - -- - - ]
- - -- - -
- - -- - -- - - "formatted_address" : "Calgary, AB, Canada"
- - -- - -- - - "geometry" : {
- - -- - -- - -- - - "bounds" : {
- - -- - -- - -- - -- - - "northeast" : {
- - -- - -- - -- - -- - -- - - "lat" : 51.18383
- - -- - -- - -- - -- - -- - - "lng" : -113.8769511 }
- - -- - -- - -- - -
- - -- - -- - -- - -- - - "southwest" : {
- - -- - -- - -- - -- - -- - - "lat" : 50.84240399999999
- - -- - -- - -- - -- - -- - - "lng" : -114.27136 }
- - -- - -- - -- - - }
- - -- - -- - -
- - -- - -- - -- - - "location" : {
- - -- - -- - -- - -- - - "lat" : 51.0486151
- - -- - -- - -- - -- - - "lng" : -114.0708459 }
- - -- - -- - -
- - -- - -- - -- - - "location_type" : "APPROXIMATE"
- - -- - -- - -- - - "viewport" : {
- - -- - -- - -- - -- - - "northeast" : {
- - -- - -- - -- - -- - -- - - "lat" : 51.18383
- - -- - -- - -- - -- - -- - - "lng" : -113.8769511 }
- - -- - -- - -- - -
- - -- - -- - -- - -- - - "southwest" : {
- - -- - -- - -- - -- - -- - - "lat" : 50.84240399999999
- - -- - -- - -- - -- - -- - - "lng" : -114.27136 }
- - -- - -- - -- - - }
- - -- - -- - - }
- - -- - -
- - -- - -- - - "place_id" : "ChIJ1T-EnwNwcVMROrZStrE7bSY"
- - -- - -- - - "types" : [
- - -- - -- - -- - - "locality"
- - -- - -- - -- - - "political" ]
- - -- - - }
- - - ]

- - - "status" : "OK" }

এটি সত্যিই দুর্দান্ত ধন্যবাদ। আমি যে বিষয়টিকে সামান্য উন্নতি করতে চাইছি তা হ'ল: var ইন্ডেন্ট = "-----" এর জন্য একটি
ভেরি

3

আপনি নীচের মত এটি করতে পারে।

$array = array(
   "a" => "apple",
   "b" => "banana",
   "c" => "catnip"
);

foreach ($array as $a_key => $a_val) {
   $json .= "\"{$a_key}\" : \"{$a_val}\",\n";
}

header('Content-Type: application/json');
echo "{\n"  .rtrim($json, ",\n") . "\n}";

উপরে ফেসবুক মত আউটপুট ধরণের হবে।

{
"a" : "apple",
"b" : "banana",
"c" : "catnip"
}

a_valঅ্যারে বা অবজেক্ট হলে কী হবে ?
জাচ রেটনার

1
প্রশ্নটিতে জসন ব্যবহার করে আমি একটি উদাহরণের উত্তর দিয়েছি, আমি খুব শীঘ্রই আমার উত্তর আপডেট করব।
জ্যাক 15

3

পুনরাবৃত্ত সমাধানের জন্য ক্লাসিক কেস। এখানে আমার:

class JsonFormatter {
    public static function prettyPrint(&$j, $indentor = "\t", $indent = "") {
        $inString = $escaped = false;
        $result = $indent;

        if(is_string($j)) {
            $bak = $j;
            $j = str_split(trim($j, '"'));
        }

        while(count($j)) {
            $c = array_shift($j);
            if(false !== strpos("{[,]}", $c)) {
                if($inString) {
                    $result .= $c;
                } else if($c == '{' || $c == '[') {
                    $result .= $c."\n";
                    $result .= self::prettyPrint($j, $indentor, $indentor.$indent);
                    $result .= $indent.array_shift($j);
                } else if($c == '}' || $c == ']') {
                    array_unshift($j, $c);
                    $result .= "\n";
                    return $result;
                } else {
                    $result .= $c."\n".$indent;
                } 
            } else {
                $result .= $c;
                $c == '"' && !$escaped && $inString = !$inString;
                $escaped = $c == '\\' ? !$escaped : false;
            }
        }

        $j = $bak;
        return $result;
    }
}

ব্যবহার:

php > require 'JsonFormatter.php';
php > $a = array('foo' => 1, 'bar' => 'This "is" bar', 'baz' => array('a' => 1, 'b' => 2, 'c' => '"3"'));
php > print_r($a);
Array
(
    [foo] => 1
    [bar] => This "is" bar
    [baz] => Array
        (
            [a] => 1
            [b] => 2
            [c] => "3"
        )

)
php > echo JsonFormatter::prettyPrint(json_encode($a));
{
    "foo":1,
    "bar":"This \"is\" bar",
    "baz":{
        "a":1,
        "b":2,
        "c":"\"3\""
    }
}

চিয়ার্স


3

এই সমাধানটি JSON কে 'সত্যিই সুন্দর' করে তোলে। ওপি যা চেয়েছিল ঠিক তা নয়, তবে এটি আপনাকে জেএসওএন আরও ভালভাবে কল্পনা করতে দেয়।

/**
 * takes an object parameter and returns the pretty json format.
 * this is a space saving version that uses 2 spaces instead of the regular 4
 *
 * @param $in
 *
 * @return string
 */
function pretty_json ($in): string
{
  return preg_replace_callback('/^ +/m',
    function (array $matches): string
    {
      return str_repeat(' ', strlen($matches[0]) / 2);
    }, json_encode($in, JSON_PRETTY_PRINT | JSON_HEX_APOS)
  );
}

/**
 * takes a JSON string an adds colours to the keys/values
 * if the string is not JSON then it is returned unaltered.
 *
 * @param string $in
 *
 * @return string
 */

function markup_json (string $in): string
{
  $string  = 'green';
  $number  = 'darkorange';
  $null    = 'magenta';
  $key     = 'red';
  $pattern = '/("(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/';
  return preg_replace_callback($pattern,
      function (array $matches) use ($string, $number, $null, $key): string
      {
        $match  = $matches[0];
        $colour = $number;
        if (preg_match('/^"/', $match))
        {
          $colour = preg_match('/:$/', $match)
            ? $key
            : $string;
        }
        elseif ($match === 'null')
        {
          $colour = $null;
        }
        return "<span style='color:{$colour}'>{$match}</span>";
      }, str_replace(['<', '>', '&'], ['&lt;', '&gt;', '&amp;'], $in)
   ) ?? $in;
}

public function test_pretty_json_object ()
{
  $ob       = new \stdClass();
  $ob->test = 'unit-tester';
  $json     = pretty_json($ob);
  $expected = <<<JSON
{
  "test": "unit-tester"
}
JSON;
  $this->assertEquals($expected, $json);
}

public function test_pretty_json_str ()
{
  $ob   = 'unit-tester';
  $json = pretty_json($ob);
  $this->assertEquals("\"$ob\"", $json);
}

public function test_markup_json ()
{
  $json = <<<JSON
[{"name":"abc","id":123,"warnings":[],"errors":null},{"name":"abc"}]
JSON;
  $expected = <<<STR
[
  {
    <span style='color:red'>"name":</span> <span style='color:green'>"abc"</span>,
    <span style='color:red'>"id":</span> <span style='color:darkorange'>123</span>,
    <span style='color:red'>"warnings":</span> [],
    <span style='color:red'>"errors":</span> <span style='color:magenta'>null</span>
  },
  {
    <span style='color:red'>"name":</span> <span style='color:green'>"abc"</span>
  }
]
STR;

  $output = markup_json(pretty_json(json_decode($json)));
  $this->assertEquals($expected,$output);
}

}


2

আপনি যদি কেবলমাত্র ব্যবহার করেন $json_string = json_encode($data, JSON_PRETTY_PRINT);, আপনি ব্রাউজারে এই জাতীয় কিছু পাবেন ( প্রশ্ন থেকে ফেসবুক লিঙ্কটি ব্যবহার করে :)): এখানে চিত্র বর্ণনা লিখুন

তবে যদি আপনি জেএসএনভিউয়ের মতো ক্রোম এক্সটেনশন ব্যবহার করেন (উপরের পিএইচপি বিকল্প ছাড়াই) তবে আপনি আরও সুন্দরভাবে পঠনযোগ্য ডিবাগযোগ্য সমাধান পাবেন যেখানে আপনি প্রতিটি একক জেএসওএন বিষয়টিকে সহজেই ভাঁজ / সঙ্কুচিত করতে পারেন: এখানে চিত্র বর্ণনা লিখুন


1

print_r পিএইচপি জন্য প্রিন্ট মুদ্রণ

উদাহরণ পিএইচপি

function print_nice($elem,$max_level=10,$print_nice_stack=array()){
    if(is_array($elem) || is_object($elem)){
        if(in_array($elem,$print_nice_stack,true)){
            echo "<font color=red>RECURSION</font>";
            return;
        }
        $print_nice_stack[]=&$elem;
        if($max_level<1){
            echo "<font color=red>nivel maximo alcanzado</font>";
            return;
        }
        $max_level--;
        echo "<table border=1 cellspacing=0 cellpadding=3 width=100%>";
        if(is_array($elem)){
            echo '<tr><td colspan=2 style="background-color:#333333;"><strong><font color=white>ARRAY</font></strong></td></tr>';
        }else{
            echo '<tr><td colspan=2 style="background-color:#333333;"><strong>';
            echo '<font color=white>OBJECT Type: '.get_class($elem).'</font></strong></td></tr>';
        }
        $color=0;
        foreach($elem as $k => $v){
            if($max_level%2){
                $rgb=($color++%2)?"#888888":"#BBBBBB";
            }else{
                $rgb=($color++%2)?"#8888BB":"#BBBBFF";
            }
            echo '<tr><td valign="top" style="width:40px;background-color:'.$rgb.';">';
            echo '<strong>'.$k."</strong></td><td>";
            print_nice($v,$max_level,$print_nice_stack);
            echo "</td></tr>";
        }
        echo "</table>";
        return;
    }
    if($elem === null){
        echo "<font color=green>NULL</font>";
    }elseif($elem === 0){
        echo "0";
    }elseif($elem === true){
        echo "<font color=green>TRUE</font>";
    }elseif($elem === false){
        echo "<font color=green>FALSE</font>";
    }elseif($elem === ""){
        echo "<font color=green>EMPTY STRING</font>";
    }else{
        echo str_replace("\n","<strong><font color=red>*</font></strong><br>\n",$elem);
    }
}

1

1 - json_encode($rows,JSON_PRETTY_PRINT);নিউলাইন অক্ষরগুলির সাথে প্রাকটিকৃত ডেটা ফেরত দেয়। এটি কমান্ড লাইন ইনপুটটির জন্য সহায়ক, তবে আপনি আবিষ্কার করেছেন যে ব্রাউজারের মধ্যে তেমন সুন্দর দেখাচ্ছে না। ব্রাউজারটি নতুন লাইনগুলিকে উত্স হিসাবে গ্রহণ করবে (এবং এভাবে পৃষ্ঠার উত্সটি দেখানো সত্যই সুন্দর জেএসওএন দেখায়) তবে সেগুলি ব্রাউজারগুলিতে আউটপুট ফর্ম্যাট করতে ব্যবহৃত হয় না। ব্রাউজারগুলির এইচটিএমএল প্রয়োজন।

2 - এই ফিকশন গিথুবটি ব্যবহার করুন

<?php
    /**
     * Formats a JSON string for pretty printing
     *
     * @param string $json The JSON to make pretty
     * @param bool $html Insert nonbreaking spaces and <br />s for tabs and linebreaks
     * @return string The prettified output
     * @author Jay Roberts
     */
    function _format_json($json, $html = false) {
        $tabcount = 0;
        $result = '';
        $inquote = false;
        $ignorenext = false;
        if ($html) {
            $tab = "&nbsp;&nbsp;&nbsp;&nbsp;";
            $newline = "<br/>";
        } else {
            $tab = "\t";
            $newline = "\n";
        }
        for($i = 0; $i < strlen($json); $i++) {
            $char = $json[$i];
            if ($ignorenext) {
                $result .= $char;
                $ignorenext = false;
            } else {
                switch($char) {
                    case '[':
                    case '{':
                        $tabcount++;
                        $result .= $char . $newline . str_repeat($tab, $tabcount);
                        break;
                    case ']':
                    case '}':
                        $tabcount--;
                        $result = trim($result) . $newline . str_repeat($tab, $tabcount) . $char;
                        break;
                    case ',':
                        $result .= $char . $newline . str_repeat($tab, $tabcount);
                        break;
                    case '"':
                        $inquote = !$inquote;
                        $result .= $char;
                        break;
                    case '\\':
                        if ($inquote) $ignorenext = true;
                        $result .= $char;
                        break;
                    default:
                        $result .= $char;
                }
            }
        }
        return $result;
    }

0

নিম্নলিখিতটি আমার পক্ষে কাজ করেছে:

টেস্ট.এফপি এর বিষয়বস্তু:

<html>
<body>
Testing JSON array output
  <pre>
  <?php
  $data = array('a'=>'apple', 'b'=>'banana', 'c'=>'catnip');
  // encode in json format 
  $data = json_encode($data);

  // json as single line
  echo "</br>Json as single line </br>";
  echo $data;
  // json as an array, formatted nicely
  echo "</br>Json as multiline array </br>";
  print_r(json_decode($data, true));
  ?>
  </pre>
</body>
</html>

আউটপুট:

Testing JSON array output


Json as single line 
{"a":"apple","b":"banana","c":"catnip"}
Json as multiline array 
Array
(
    [a] => apple
    [b] => banana
    [c] => catnip
)

এইচটিএমএলে "প্রাক" ট্যাগের ব্যবহারটিও নোট করুন।

আশা করি যে কাউকে সাহায্য করবে


2
এটি প্রশ্নের উত্তর দেয় না। আপনি ভার্স ডাম্পিং করছেন, JSON ফর্ম্যাটেড মুদ্রণ করছেন না।
ম্যাডব্রেকস

0

JSON ডেটা ফর্ম্যাট করার সর্বোত্তম উপায় এই জাতীয়!

header('Content-type: application/json; charset=UTF-8');
echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

আপনার ডেটা দিয়ে $ প্রতিক্রিয়া প্রতিস্থাপন করুন যা জেএসএনে রূপান্তর করতে হবে


0

পিএইচপি সংস্করণ 5.3 বা তার আগে চলমানদের জন্য, আপনি নীচে চেষ্টা করতে পারেন:

$pretty_json = "<pre>".print_r(json_decode($json), true)."</pre>";

echo $pretty_json;

-4

আপনি যদি এমভিসির সাথে কাজ করছেন

আপনার নিয়ামক মধ্যে এটি করার চেষ্টা করুন

public function getLatestUsers() {
    header('Content-Type: application/json');
    echo $this->model->getLatestUsers(); // this returns json_encode($somedata, JSON_PRETTY_PRINT)
}

তারপরে আপনি যদি কল / গেটল্যাস্ট ইউজার ব্যবহার করেন তবে আপনি একটি সুন্দর জেএসএন আউটপুট পাবেন;)


প্রতিধ্বনির পরে আমার মন্তব্যটি দেখুন যেখানে এটি বেশ প্রিন্টেন্ড হচ্ছে
ওয়েবমাস্টার

1
এমভিসি হ'ল এক ধরণের ফ্রেমওয়ার্ক ডিজাইন, জেএসওএন আউটপুট দেওয়ার সাথে কিছুই করার নেই।
ম্যাকিয়েজ পাপ্রোকি

এটি 2013 লোকের কাছ থেকে একটি উত্তর;)
ওয়েবমাস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.