2010-08-14 11 views
5

मैं इस समय PHP द्वारा JSON के साथ काम कर रहा हूँ, जब मैं यह सांकेतिक शब्दों में बदलना है, यह आउटपुट के रूप में होगा:संरचित JSON लेआउट

{ 
    "username": "ND", 
    "email": "[email protected]", 
    "regdate": "8th June 2010", 
    "other": 
    { 
     "alternative": "ND" 
    }, 
    "level":"6" 
} 
:

{"username":"ND","email":"[email protected]","regdate":"8th June 2010","other":{"alternative":"ND"},"level":"6"} 

जब मैं यह उत्पादन के लिए इस तरह चाहते हैं

ताकि जब मैं और मेरे अन्य डेवलपर इसे संरचित करते समय पर्याप्त रूप से पढ़ सकें। मैं यह कैसे कर सकता हूँ?

भी इस तरह उदाहरण:

<?php 
function json_pretty_encode($obj) 
{ 
$json = json_encode($obj); 
if (!$json) return $json; 

$f = ''; 
$len = strlen($json); 

$depth = 0; 
$newline = false; 

for ($i = 0; $i < $len; ++$i) 
{ 
    if ($newline) 
    { 
    $f .= "\n"; 
    $f .= str_repeat(' ', $depth); 
    $newline = false; 
    } 

    $c = $json[$i]; 
    if ($c == '{' || $c == '[') 
    { 
    $f .= $c; 
    $depth++; 
    $newline = true; 
    } 
    else if ($c == '}' || $c == ']') 
    { 
    $depth--; 
    $f .= "\n"; 
    $f .= str_repeat(' ', $depth); 
    $f .= $c; 
    } 
    else if ($c == '"') 
    { 
    $s = $i; 
    do { 
    $c = $json[++$i]; 
    if ($c == '\\') 
    { 
    $i += 2; 
    $c = $json[$i]; 
    } 
    } while ($c != '"'); 
    $f .= substr($json, $s, $i-$s+1); 
    } 
    else if ($c == ':') 
    { 
    $f .= ': '; 
    } 
    else if ($c == ',') 
    { 
    $f .= ','; 
    $newline = true; 
    } 
    else 
    { 
    $f .= $c; 
    } 
} 

return $f; 
} 
?> 

यह है:

https://graph.facebook.com/19292868552

चीयर्स

+7

मैं आउटपुट के लिए प्रारूपित करने की कोशिश करने के बजाय डेटा देखने के लिए बेहतर टूल का उपयोग करने की सलाह देता हूं। https://addons.mozilla.org/en-US/firefox/addon/10869/ – Quentin

+1

@ डेविड के साथ सहमत हुए। फायरबग आपको जेएसओएन को पेड़ के रूप में भी नेविगेट करने देता है। बहुत उपयोगी। –

+0

क्या आप इसे डीकोड करने से पहले json_encode() के साथ पहले से ही अच्छी तरह से गठित JSON को एन्कोड करने का प्रयास कर रहे हैं, क्योंकि इससे ऊपर का परिणाम सामने आएगा? - नीचे मेरा संपादन देखें। –

उत्तर

5

मैं इस उपयोगी अपने आप को मिल सकता है, इसलिए यहाँ एक छोटे से समारोह मैंने लिखा है भरोसेमंद, भरोसा है कि PHP एक वैली वापस करेगा डी JSON स्ट्रिंग। इसे अधिक संक्षेप में लिखा जा सकता है, लेकिन इस तरह से संशोधित करना आसान है। (और निश्चित रूप से यह उत्पादन परिदृश्यों में अनावश्यक ओवरहेड जोड़ता है जहां केवल एक मशीन पाठ पढ़ती है।)

संपादित करें: संख्याओं और अन्य अज्ञात वर्णों को पकड़ने के लिए एक और खंड जोड़ा गया।

+2

यदि आपको लगता है कि यह भरोसा करने के लिए मूर्ख है कि PHP JSON का निर्माण करेगा जब JSON फ़ंक्शन में बनाया गया है ... आप इसका उपयोग करने के लिए पर्याप्त PHP पर भरोसा कैसे कर सकते हैं? – Quentin

+0

@ डेविड, मैं बस यह चेतावनी के रूप में था कि जेएसओएन के मनमाने ढंग से पार्सिंग के लिए उस कोड को खींचने के लिए नहीं, क्योंकि यह PHP की आपूर्ति के प्रारूप की अपेक्षा करता है। @ पीटर, यह एक एन्कोडर है। JSON में कनवर्ट करने के लिए आपको इसे ऑब्जेक्ट पास करने की आवश्यकता है। – Matthew

+0

@ कॉनफोर्स - क्षमा करें, मस्तिष्क फ्रीज। मैं सिर्फ json_decode के बारे में सोच रहा था। –

0

आप json_xs उपकरण को स्थापित करने का प्रयास कर सकते हैं और इसे कर्ल के साथ जोड़े में उपयोग कर सकते हैं: curl -X GET http://some.re/sour/se/name.json | json_xs

3

पीएचपी 5.4.0 Alpha1 के रूप में, आप आसानी से इसे पसंद कर सकते हैं:

$data = array (
    'username' => 'ND', 
    'email' => '[email protected]', 
    'regdate' => '8th June 2010', 
    'other' => 
    array (
    'alternative' => 'ND', 
), 
    'level' => '6', 
); 

echo json_encode($data, JSON_PRETTY_PRINT),"\n"; 

उत्पादन होता है:

{ 
    "username": "ND", 
    "email": "[email protected]", 
    "regdate": "8th June 2010", 
    "other": { 
     "alternative": "ND" 
    }, 
    "level": "6" 
} 
-2

यह शायद सबसे आसान तरीका है:

var_dump(json_decode($json)); 
संबंधित मुद्दे