2012-07-01 4 views
5

के साथ जेसन फ़ाइल को पार्स करना मुझे जेसन के लिए मैपिंग बनाने में समस्या है जो मैं जेसन का उपयोग करके पार्स करना चाहता हूं। यह बहुत विशिष्ट है, इसकी एक जेसन फ़ाइल के बारे में एक जेसन सरणी जिसमें वस्तुओं के साथ है। (, मैं उनमें से ज्यादातर हटा दिया क्योंकि thats मेरे सवाल के लिए महत्वपूर्ण नहीं), एक सरणीजीएसएन

[ 
    { 
     "venue": { 
      "venue_seasons": [ 
       { 
        "created_at": "2011-12-25T23:00:28Z", 
        "updated_at": "2011-12-28T15:13:53Z", 
        "start_timestamp": 1293840000, 
        "id": 337, 
        "end": "2011-12-24T00:00:00Z", 
        "enabled": true, 
        "start": "2011-01-01T00:00:00Z", 
        "season_openings": [ … ], 
        "end_timestamp": 1324684800 
       }, 
       { … } 
      ], 
      "address": "someadress", 
      "city": "cityname", 
      "name": "name", 
      "created_at": "2011-03-31T07:55:33Z", 
     etcetera 
    } 
    "venue":{another venue 

तो सबसे पहले एक वस्तु (स्थल) उस में वस्तुओं की एक बहुत कुछ के साथ तुलना में:

मेरी jsonfile इस तरह शुरू होता है , और कुछ सरणी (जैसे season_openings)।

मेरा पार्सिंग कोड इस तरह काम करता है, मैं जीसन का उपयोग कर रहा हूं। इनपुटस्ट्रीम ठीक काम करता है।

public class JsonResponse { 
    public List<Venues> venue; 
} 

और Venues.class:

public class Venues { 

    public List<VenueSeasons> venue_seasons; 

    @SerializedName("adress") 
    public String getAdress; 

    @SerializedName("city") 
    public String getCity; 

    @SerializedName("country") 
    public String getCountry; etcetera 
} 

लेकिन मैं कोई त्रुटि मिलती है जब मैं इस कोड को चलाएँ:

Unable to start activity ComponentInfo{com.hera.android.JSON/com.hera.android.JSON.TestParser2Activity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

बेशक

Reader reader = new InputStreamReader(inputStream); 
JsonResponse venueResponse = gson.fromJson(reader, JsonResponse.class);    
List<Venues> results = venueResponse.venue; 
वर्ग JsonResponse साथ

मैं त्रुटि पढ़ सकता हूं: यह ओ की अपेक्षा करता है bjects लेकिन एक सरणी मिलता है। मैंने अलग jsonresponse.class के साथ बहुत कुछ किया और यहां तक ​​कि पूरे जेसन सरणी को जेसन ऑब्जेक्ट में डालने के साथ (वास्तव में कोई समाधान नहीं है क्योंकि मुझे इस प्रकार के जेसनफ़ाइल के साथ काम करने की आवश्यकता है)। लेकिन हर बार मुझे यह या एक ही त्रुटि मिलती है।

मुझे लगता है कि मैं एक समाधान के करीब हूं, क्या कोई देख सकता है कि मैं क्या नहीं कर सकता और मुझे मदद हाथ दे सकता हूं? धन्यवाद।

+0

अमान्य उदाहरण JSON और अपूर्ण अमान्य उदाहरण जावा कोड के साथ, जो लोग मदद करने का प्रयास कर सकते हैं, वे वास्तव में क्या चल रहा है इसके बारे में अनुमान लगा रहे हैं। पूर्ण न्यूनतम उदाहरण पोस्ट करना एक अच्छा अभ्यास है जो हल करने की कोशिश करने वाली समस्या का प्रदर्शन करता है। –

उत्तर

4

इस तरह Gson कॉल करके देखें:

List<Venues> venues = gson.fromJson(reader, new TypeToken<List<Venues>>() {}.getType()); 

यह काम करता है क्योंकि आपके JSON दस्तावेज़ एक List, नहीं एक वस्तु अपनी संपत्ति में से एक के रूप में एक सूची है कि है।

+0

धन्यवाद, यह काम किया! – Jasper

+0

मैंने कोशिश की: स्ट्रिंग नाम = venues.get (12) .getName; Log.i (venuetag, "स्थल 12 का नाम है:" + नाम); लेकिन यह नाम को शून्य मान देता है। क्या मैं इसे ठीक से कर रहा हूं? मैंने venues.size() का उपयोग किया और यह 471 लौटा, इसलिए मुझे यकीन है कि मेरी सूची काम करती है .... – Jasper

+0

@ जैस्पर, मुझे लगता है कि जावा डेटा संरचना को deserialized किया जा रहा है जो JSON संरचना से मेल नहीं खाता है, और जीसन इस प्रकार जावा "नाम" फ़ील्ड में जेएसओएन "नाम" तत्व बाध्यकारी नहीं है। –

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