2010-09-12 10 views
6

के माध्यम से पार्सल के बाद मैंने JSON में एक सरणी पार्स करने के लिए लिखा है। लेकिन वापस सरणी लंबाई 1 है और मैं इसे ठीक से फिर से करने में सक्षम नहीं हूँ। तो समस्या यह है कि मैं वापस सरणी का उपयोग करने में सक्षम नहीं हूँ।JSON में एन्कोडेड एक सरणी को पार्ल

#!/usr/bin/perl 
use strict; 

my $json_text = '[ {"name" : "abc", "text" : "text1"}, {"name" : "xyz", "text" : "text2"} ]'; 

use JSON; 
use Data::Dumper::Names; 

my @decoded_json = decode_json($json_text); 
print Dumper(@decoded_json), length(@decoded_json), "\n"; 

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

$VAR1 = [ 
    { 
     'text' => 'text1', 
     'name' => 'abc' 
     }, 
     { 
     'text' => 'text2', 
     'name' => 'xyz' 
     } 
    ]; 
1 

उत्तर

16

decode_json function रिटर्न एक arrayref, नहीं एक सूची है। आप इसे भिन्नता सूची प्राप्त करने चाहिए:

my @decoded_json = @{decode_json($json_text)}; 

आप perldoc perlreftut और perldoc perlref

+0

डीरफ़्रेंसिंग थोड़ा सा मदद करता है। अब मैं वापस सरणी पर फिर से करने में सक्षम हूँ। लेकिन फिर भी मुझे सरणी = 1 –

+0

मेरी बुराई की लंबाई मिलती है। सरणी की लंबाई प्राप्त करने के लिए लंबाई (@decoded_json) का उपयोग कर रहा था !! –

1

JSON के बारे में, आप के रूप में यह है आप JSON :: XS मॉड्यूल स्थापित सुनिश्चित करने के लिए चाहते हो सकता है पढ़ने के लिए चाहते हो सकता है तेजी से और जेएसओएन मॉड्यूल के साथ शुद्ध पर्ल कार्यान्वयन से अधिक स्थिर। जेएसओएन मॉड्यूल जेएसओएन :: एक्सएस स्वचालित रूप से उपलब्ध होने पर इसका उपयोग करेगा।

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