2011-07-22 8 views
15

डीकोड JSON बूलियन्स वस्तुओं रहे हैं:पर्ल में, एक json जाँच डीकोड बूलियन मान

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Data::Dumper; 
use JSON; 

my $json_string = '{"boolean_field":true}'; 
my $decoded_json = from_json $json_string; 

print Dumper $decoded_json; 

आउटपुट:

$VAR1 = { 
      'boolean_field' => bless(do{\(my $o = 1)}, 'JSON::XS::Boolean') 
     }; 

JSON.pm documentation से मैं निम्नलिखित तीन तरीकों के बारे में जानते हैं:

  • JSON :: is_bool
  • JSON :: true
  • JSON :: झूठी

हालांकि, कुछ मूर्खतापूर्ण कारण के लिए मैं निर्धारित करने के लिए कैसे यदि $decoded_json में 'boolean_field' का मान सही या गलत है पता नहीं है।

(बहुत बुनियादी सवाल के लिए खेद है, यह मुझे बैटी ड्राइविंग गया है!)

+0

भ्रम का हिस्सा शायद पर्ल से ही आता है - ** पर्ल में भाषा में बूलियन प्रकार ** नहीं हैं। इसमें केवल सत्यता है। परियोजनाओं के लिए भाषा चुनते समय, विशेष रूप से जेएसओएन एपीआई के उपभोक्ताओं के लिए विचार करना एक बात है। –

उत्तर

15

यह पर्ल में एक truthy मूल्य होगा। बस इसे सामान्य के रूप में एक्सेस करें।

print 'true' if $decoded_json->{'boolean_field'}; 
+0

इस पर विस्तार करने के लिए, जेएसओएन बूलियन ऑब्जेक्ट 'सत्य' के लिए '1' और' false' के लिए '0' वापस करने के लिए ओवरलोडिंग का उपयोग करते हैं। वस्तुओं की आवश्यकता होने का एकमात्र कारण यह है कि यदि आप की आवश्यकता हो तो आप एक बूलियन और वास्तविक 0 या 1 के बीच का अंतर बता सकते हैं। – friedo

+0

धन्यवाद! जांच के बाद मैंने इसे विकास कोड में पहले सामान्य के रूप में एक्सेस किया, लेकिन एक और मुद्दे ने सही व्यवहार का मुखौटा किया, जिससे मुझे सभी तरह के अजीब दृष्टिकोणों की कोशिश करने का मौका मिला (दोह!) – vlee

+0

@ क्वांटिन, मेरे पास एक सत्यापन उप है, जहां मुझे ऐसा जांचना है यह $ बूलियन = 'सत्य'; अगर ($ decoded_json -> {'boolean_field'} eq $ boolean) {# pass}। यह स्थिति विफल हो जाती है, क्योंकि $ decoded_json -> {'boolean_field'} लौटाता है 1. मैं इसका मूल्यांकन कैसे कर सकता हूं 'स्ट्रिंग' है? – Subhash

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