2013-04-08 16 views
7

में ऑब्जेक्ट्स की संख्या पाएं मैंने बहुत कुछ खोजा है और मुझे अपने JSON सरणी की लंबाई खोजने के लिए कुछ विधियां मिलीं। मैंने कोशिश की है:किसी जेसन सरणी

  1. count
  2. json.length

लेकिन इन लौट 1, वास्तविक लंबाई के बजाय। मैं PHP का उपयोग करके इसे दिखाना चाहता हूं।

मेरे json है:

$huge = '[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]'; 

मैं अपने JSON सारणी में ऑब्जेक्ट की संख्या कैसे मिल सकती है?

+3

जेएसओएन एक क्रमबद्ध प्रारूप है, इसे डी-सीरियलाइज करने और जांचने के बारे में क्या है? –

+0

यहां आपके पास json_decode का उपयोग किए बिना एक और समाधान है। http: // stackoverflow।कॉम/प्रश्न/28772904/कन्वर्ट-जेसन-स्ट्रिंग-टू-एरे-बिना-जेसन-डीकोड –

+0

यहां आपके पास json_decode का उपयोग किए बिना एक और समाधान है: http://stackoverflow.com/questions/28772904/convert-json-string-to -एरे-बिना-जेसन-डीकोड –

उत्तर

4

डेटा के साथ कोई काम करने से पहले आपको PHP arrays में डीकोड करने की आवश्यकता होगी।

प्रयास करें:

$hugeArray = json_decode($huge, true); // Where variable $huge holds your JSON string. 

echo count($hugeArray); 

आप एक कम गहराई तक गिनती करने के लिए की जरूरत है, तो आप सरणी के माध्यम से पुनरावृति करने की आवश्यकता होगी।

उदाहरण के लिए, यदि आप अगले परत में तत्वों की संख्या की गणना करना चाहते हैं, तो आप कर सकते हैं:

foreach ($hugeArray as $key => $value) { 
    echo $key.' - '.count($value); 
} 

बहरहाल, यह जरूरी सार्थक नहीं है, क्योंकि यह पर निर्भर करता है कि आप क्या कर रहे हैं गिनें, आपका लक्ष्य क्या है। वास्तविक ब्लॉक का मतलब क्या हो सकता है, इस पर ध्यान दिए बिना, यह ब्लॉक केवल नीचे 1 तत्वों की संख्या की गणना करता है।

+0

और अब प्रत्येक छोटी सरणी – user2201395

+0

@ user2201395 में ऑब्जेक्ट्स की संख्या कैसे मुद्रित कर सकते हैं फिर आप सरणी के तत्वों के माध्यम से पुनरावृत्त करते हैं और प्रत्येक तत्व की गिनती() को प्रतिबिंबित करते हैं। – Stegrex

0

पहले अपने json को डीकोड करें और इसके बाद count पर इसका उपयोग करें।

$huge='[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]'; 
$arr = json_decode($huge,true); 
echo count($arr); 
17

आप decode the json वस्तु की जरूरत है और फिर इसे में तत्वों गिनती ..

$json_array = json_decode($json_string, true); 
$elementCount = count($json_array); 
+0

आप इसे '$ elementCount = count (json_decode ($ json_string, true) घोंसला से एक पंक्ति में छोटा कर सकते हैं;' यदि आपको कहीं और PHP चर के रूप में $ json_array की आवश्यकता नहीं है। – AndyD273

0

वस्तु (चाबी का एक अव्यवस्थित संग्रह: ':' के साथ मान युग्म वर्ण कुंजी को अलग करने और मूल्य, अल्पविराम से अलग और घुंघराले ब्रेसिज़ में संलग्न ...)

Wikipedia: JSON

तो, आपको बस इतना करना है कि केवल घुंघराले ब्रेसिज़ खोले गए हैं।

substr_count($huge , '{'); 

लेकिन ... यदि आप जेसन में '{' के साथ कुछ तारों को संग्रहित कर रहे हैं तो आप इसे नहीं कर सकते हैं। इस तरह आपको अपना खुद का सरल पार्सर या नियमित अभिव्यक्ति लिखनी होगी।

लेकिन ... json_decode के लिए आसान तरीका। और यदि आप की सभी ऑब्जेक्ट्स जेसन में प्राप्त करना चाहते हैं तो रिकर्सिव फ़ंक्शन का उपयोग करें।

function count_objects($value) 
    { 
    if (is_scalar($value) || is_null($value)) 
     $count = 0; 
    elseif (is_array($value)) 
     { 
     $count = 0; 
     foreach ($value as $val) 
      $count += count_objects($val); 
     } 
    elseif (is_object($value)) 
     { 
     $count = 1; 
     $reflection_object = new \ReflectionObject($value); 
     foreach ($reflection_object->getProperties() as $property) 
      { 
      $count +=count_objects($property->getValue($value)); 
      } 
     } 

    return $count; 
    } 

$huge = '[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]'; 

echo count_objects(json_decode($huge)); 
संबंधित मुद्दे