JSON format definition स्पष्ट रूप से सभी संभावित मान और उनके अभ्यावेदन पता चलता है:
एक मूल्य दोहरे उद्धरण में एक स्ट्रिंग, या एक नंबर, या true
या false
या null
, या किसी वस्तु हो सकता है या एक सरणी।
दोनों वस्तुओं और सरणियों JSON प्रतिनिधित्व ({}
और []
क्रमशः में लिपटे) में विशेष सिंटेक्स है, इसलिए वे किसी भी मामले में false
के साथ नहीं मिलाया जा सकता। स्ट्रिंग के साथ ही यह जाता है - यह ""
(डबल उद्धरण चिह्न) में लपेटा गया है। संख्याओं के लिए, उन्हें कम से कम एक अंक होना चाहिए - इसलिए false
(और true
और null
) के साथ भी भ्रमित नहीं किया जा सकता है।
तो यह हमें एकमात्र मामले के साथ छोड़ देता है: जब json_encode किसी ऑब्जेक्ट को अपने JSON प्रस्तुति को फिर से परिभाषित करने की प्रक्रिया करता है। उदाहरण (PHP 5.4+) के लिए:
class FalsyFoo implements JsonSerializable {
public $foo;
public function __construct($f) {
$this->foo = $f;
}
public function jsonSerialize() {
return false;
}
}
$f = new FalsyFoo(true);
$fj = json_encode($f);
var_dump($fj); // string(5) 'false'
var_dump(json_decode($fj)); // bool(false)
तकनीकी तौर पर, हम अभी भी यहाँ false
मूल्य के साथ काम करते हैं, लेकिन स्रोत स्पष्ट रूप से अलग है।
आप अभी भी आश्वस्त नहीं कर रहे हैं, की जाँच json_decode
, जो तर्क की जाँच के बाद php_json_decode_ex कॉल की the source code। यह बदले में, parse_JSON_ex पहले कॉल करता है, जो पूर्वनिर्धारित state transition table पर संचालित होता है; उत्तरार्द्ध में राज्यों का केवल एक सेट है जिसके परिणामस्वरूप false
मूल्य होता है। इस कॉल के किसी भी तरह विफल रहता है, मूल्य directly चेक किया गया है:
if (str_len == 4) {
if (!strcasecmp(str, "null")) {
/* We need to explicitly clear the error
because its an actual NULL and not an error */
jp->error_code = PHP_JSON_ERROR_NONE;
RETVAL_NULL();
} else if (!strcasecmp(str, "true")) {
RETVAL_BOOL(1);
}
} else if (str_len == 5 && !strcasecmp(str, "false")) {
RETVAL_BOOL(0);
}
... और है कि केवल मामला है जब return_value बूलियन पर सेट किया जाता है।
से के मूल्यों वापस आ जाएगी कि मैं क्या देख सकते हैं, यह केवल वापस होगा 'सत्य' या 'गलत' यदि वह वास्तविक मान डीकोड किया गया था। –
यह नहीं कहता कि यह सच या गलत – Markasoftware
"वास्तविक JSON मान नहीं है" क्षमा करें, लेकिन आपको किसी अन्य मामले में 'सत्य' या 'झूठी' वापस क्या माना जा सकता है? – RandomSeed