2013-12-11 11 views
9

साथ मैं काफी GSON के लिए नया हूँ और इस प्रारूप के लिए एक JSON प्रतिक्रिया मिल (बस एक आसान उदाहरण है, तो मान कोई अर्थ नहीं) के लिए:कैसे डी-क्रमानुसार एक नक्शा <स्ट्रिंग, वस्तु> GSON

{ 
    "Thomas": { 
     "age": 32, 
     "surname": "Scott" 
    }, 
    "Andy": { 
     "age": 25, 
     "surname": "Miller" 
    } 
} 

मैं जीएसओएन को एक नक्शा बनाने के लिए चाहता हूं, व्यक्तिगत डेटा स्पष्ट रूप से एक वस्तु है। नाम स्ट्रिंग PersonData के लिए पहचानकर्ता है।

जैसा कि मैंने कहा मैं बहुत GSON के लिए नया हूँ और केवल कुछ ऐसा करने की कोशिश की:

Gson gson = new Gson(); 
Map<String, PersonData> decoded = gson.fromJson(jsonString, new TypeToken<Map<String, PersonData>>(){}.getType()); 

लेकिन इस त्रुटि फेंक दिया:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 3141 

किसी भी मदद की सराहना की है :)

+1

आपका Json अमान्य है। "एंडी" – Taylor

+1

से पहले एक अल्पविराम की आवश्यकता है मुझे खेद है, जेएसओएन निश्चित रूप से मान्य है। मैंने बस JSON को छोटा कर दिया और भूल गया। यह जीएसओएन भाग के बारे में अधिक है कि इसे कुंजी-मूल्य में कैसे समझें, जहां मूल्य जीएसओएन द्वारा क्रमबद्ध करने के लिए एक वस्तु है। – luuksen

उत्तर

23

मेरे लिए निम्नलिखित काम

static class PersonData { 
    int age; 
    String surname; 
    public String toString() { 
     return "[age = " + age + ", surname = " + surname + "]"; 
    } 
} 

public static void main(String[] args) { 
    String json = "{\"Thomas\": {\"age\": 32,\"surname\": \"Scott\"},\"Andy\": {\"age\": 25,\"surname\": \"Miller\"}}"; 
    System.out.println(json); 
    Gson gson = new Gson(); 
    Map<String, PersonData> decoded = gson.fromJson(json, new TypeToken<Map<String, PersonData>>(){}.getType()); 
    System.out.println(decoded); 
} 

और प्रिंट

{"Thomas": {"age": 32,"surname": "Scott"},"Andy": {"age": 25,"surname": "Miller"}} 
{Thomas=[age = 32, surname = Scott], Andy=[age = 25, surname = Miller]} 

तो हो सकता है आपके PersonData वर्ग बहुत अलग है।

+0

ठीक है, मुझे एक और समस्या थी और मुझे खेद है कि मैंने आपका समय परेशान किया। मुझे अपने वर्ग के प्रकारों में गलती हुई थी कि मैंने यहां पोस्ट भी नहीं किया था, लेकिन आपकी पुष्टि है कि जीएसओएन भाग ने मुझे यह जानने में मदद की कि मुझे कहां देखना है। धन्यवाद! – luuksen

+0

@luuksen आपका स्वागत है। 'गसन' आमतौर पर इसके त्रुटि वक्तव्य में बहुत अच्छा है। 'BEGIN_ARRAY',' BEGIN_OBJECT', 'NUMBER' और' STRING' इंगित करेंगे कि जीसन पार्सर वास्तव में क्या अपेक्षा की जा रही है इसके बजाए पढ़ रहा है। –

1

आप अपनी कस्टम ऑब्जेक्ट को JSON प्रारूप में बदलने के लिए gson.toJsonTree(Object o) का उपयोग कर सकते हैं।

मेरे लिए निम्नलिखित काम करता है:

private static class PersonData { 
    private int age; 
    private String surname; 

    public PersonData(int age, String surname) { 
     this.age = age; 
     this.surname = surname; 
    } 
} 

public static void main(String[] args) { 
    PersonData first = new PersonData(24, "Yovkov"); 
    PersonData second = new PersonData(25, "Vitanov"); 

    Gson gson = new Gson(); 

    JsonObject jsonObject = new JsonObject(); 
    jsonObject.add("kocko", gson.toJsonTree(first)); 
    jsonObject.add("deyan", gson.toJsonTree(second)); 

    System.out.println(gson.toJson(jsonObject)); 

} 

और प्रिंट:

{"kocko":{"age":24,"surname":"Yovkov"},"deyan":{"age":25,"surname":"Vitanov"}} 
+1

उपरोक्त के समान उत्तर, लेकिन थोड़ी देर बाद, आपको भी धन्यवाद! – luuksen

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