2012-06-13 17 views
9

यह "न्यूल" क्यों गूंजता है? मेरी इच्छा में यह एक खाली सरणी को डीकोड किया जाएगा।खाली सरणी के लिए json_decode वापस शून्य क्यों करता है?

क्या यह कुछ स्पष्ट है कि मुझे याद आ रही है?

<?php 

$json = json_encode(array()); 
$json_decoded = json_decode($json, true); 
// same with json_decode($json); 

if ($json_decoded == null){ 
    echo "NULL"; 
} else 
{ 
    echo "NOT NULL"; 
} 

?> 
+3

क्या होगा यदि आप '$ json_decoded === null' आज़माएं? – mgraph

+0

@ एलीओस: PHP में किसी सरणी के लिए कोई 'नया' कीवर्ड नहीं है। – prodigitalson

+0

आप कुछ अलग करने की उम्मीद कर रहे थे? – Sena

उत्तर

21

इसका कारण यह है array()==NULL है। यह इस मामले में ऑब्जेक्ट प्रकार की जांच नहीं करता है।

gettype(null) रिटर्न अशक्त, जबकि

gettype(array()) रिटर्न सरणी। आशा है कि आपको अंतर मिलेगा।

शायद आपको क्या चाहिए

if ($json_decoded === null) { 
    echo "NULL"; 
} else 
{ 
    echo "NOT NULL"; 
} 
0

यह manual से चाल

if ($json_decoded === null) 

उदाहरण कार्य करना होगा:

<?php 
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9"); 

echo "Normal: ", json_encode($a), "\n"; 
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n"; 
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n"; 
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n"; 
echo "Amp: ",  json_encode($a, JSON_HEX_AMP), "\n"; 
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n"; 
echo "All: ",  json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n"; 

$b = array(); 

echo "Empty array output as array: ", json_encode($b), "\n"; 
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n"; 

$c = array(array(1,2,3)); 

echo "Non-associative array output as array: ", json_encode($c), "\n"; 
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n"; 

$d = array('foo' => 'bar', 'baz' => 'long'); 

echo "Associative array always output as object: ", json_encode($d), "\n"; 
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n"; 
?> 

आउटपुट:

Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] 
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] 
Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] 
Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] 
Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] 
Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"] 
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"] 

Empty array output as array: [] 
Empty array output as object: {} 

Non-associative array output as array: [[1,2,3]] 
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}} 

Associative array always output as object: {"foo":"bar","baz":"long"} 
Associative array always output as object: {"foo":"bar","baz":"long"} 
2

$ json_decoded मूल्य print_r यह खाली सरणी वापस देता है। :)

$json = json_encode(array()); 
$json_decoded = json_decode($json, true); 


if ($json_decoded == null){ 
    print_r($json_decoded); 
} else 
{ 
    echo "NOT NULL"; 
} 

आउटपुट: सरणी() इसका कारण यह है == ऑपरेटर के साथ खाली सरणी हो जाता है शून्य पर

0

आप सख्त समानता ऑपरेटर === उपयोग करने के लिए, खुद के लिए निरीक्षण की जरूरत juggled प्रकार :

$json = json_encode(array()); 
var_dump($json); // string(2) "[]" 
$json_decoded = json_decode($json, true); 
var_dump($json_decoded); // array(0) { } 

तो कर रही है:

$json = json_encode(array()); 
$json_decoded = json_decode($json, true); 

if ($json_decoded === null) 
{ 
    echo "NULL"; 
} else 
{ 
    echo "NOT NULL"; 
} 

ठीक ही else हालत मुद्रण NOT NULL

0

में जाना अपने डेटा कुछ \n json_decode भी चुपचाप असफल हो सकता है शामिल है, तो होगा।

संबंधित मुद्दे