2016-03-02 18 views
21

मेरी एंड्रॉयड परियोजना में साथ एक मूल्य पढ़ें।Gson - मैं प्रतिक्रिया के दो प्रकार जहां दोनों <strong>प्रतिक्रिया दो चाबियाँ</strong> छोड़ कर एक हैं दो अलग अलग चाबियाँ

रिस्पांस 1

{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 

रिस्पांस 2

{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 

आप प्रतिक्रियाओं केवल दो प्रमुख नाम पूरा नाम/नाम और पता/शहर

मैं डॉन बदल रहे हैं देखते हैं, तो 'टी अन्य प्रतिक्रिया के लिए एक और POJO बनाना चाहते हैं। अब मेरी प्रश्न है, संभव है कि केवल एक Pojo उपयोग करने के लिए दोनों प्रतिक्रियाओं को पढ़ने के लिए है।

public class AccountInfo { 
    private String name; 
    private String city; 
    //other objects 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 
    //other setters and getters 
} 

किसी भी मदद की सराहना की होगी ...

+2

उन अतिरिक्त खेतों मनुष्य हैं और इस सेटर में तरह

public class AccountInfo { private String name; private String city; private String fullname; private String address; } 

अपने POJO क्लास में हर संभव क्षेत्रों को परिभाषित करता है, तो गेटर मैदान खाली है ऐसा नहीं होगा कोई समस्या पैदा करें। इसे आज़माएं और मुझे बताएं कि क्या मैं आपकी मदद कर सकता हूं –

+1

@ रक्षित धन्यवाद। डौग स्टीवंसन जवाब की जांच करें .. – Bharatesh

उत्तर

37

आप @SerializedName एनोटेशन का उपयोग कर दो अलग-अलग json नाम से मूल्यों को स्वीकार करने के लिए सदस्यों टिप्पणी कर सकते हैं:

@SerializedName(value = "name", alternate = {"fullName"}) 
private String name; 
@SerializedName(value = "city", alternate = {"address"}) 
private String city; 

या तो नामित तत्व तो सदस्यों को बताया कि इस तरह एनोटेट में रखा जा सकता है।

UPDATED: @SerializedName वैकल्पिक नाम जब deserializing हाँ, आप पूरी तरह से दोनों प्रतिक्रियाओं deserializing के लिए एक POJO वर्ग का उपयोग कर सकते Version 2.4

+0

करने के लिए खराब दृष्टिकोण धन्यवाद दोस्त .... – Bharatesh

+0

java.lang.IllegalArgumentException प्राप्त करना: कक्षा –

0

हाँ आप कर सकते हैं एक एकल POJO में कि। पार्स करने आप अशक्त के लिए मूल्यों की जाँच करने के लिए है जबकि

public class POJO { 

@SerializedName("name") 
public String name; 

@SerializedName("city") 
public String city; 

@SerializedName("fullName") 
public String fullName; 

@SerializedName("address") 
public String address; 

@SerializedName("downloads") 
public Integer downloads; 

@SerializedName("rating") 
public Integer rating; 

@SerializedName("repos") 
public List<String> repos = new ArrayList<String>(); 

} 

: इस प्रयास करें। उदाहरण के लिए -

जबकि प्रतिसाद पार्स करने में 1: नाम और शहर चर अशक्त हो जाएगा

रिस्पांस 2 पार्स करते समय: पूरा नाम और पता हो जाएगा अशक्त

नोट: देखने का प्रयास करें अन्य का उपयोग करने से पहले शून्य के लिए मूल्य आपको nullpointerexception

+0

बहुत बहुत धन्यवाद ... @ डौग स्टीवंसन का जवाब अधिक उपयोग है क्योंकि मुझे 'शून्य' की जांच करने की आवश्यकता नहीं है। – Bharatesh

+0

यह –

1

में जोड़ा जाता है। आपका POJO वर्ग दोनों प्रतिक्रियाओं से चाबी शामिल होंगे।

public class Response { 


private String name; 
private String city; 
private String fullName; 
private String address; 
private Integer downloads; 
private Integer rating; 
private List<String> repos ; 

} 

लेकिन जब रिस्पांस वर्ग का उपयोग कर, ध्यान रहे कि पहले प्रतिक्रिया, नाम और शहर के लिएअशक्त, और दूसरा एक के लिए, पता हो जाएगा हो और पूरा नाम।

0

, अशक्त के लिए आपरेशन की जांच प्रदर्शन करते हुए उन feilds

+0

अच्छी तरह से कनवर्टर बनाने में असमर्थ। उत्तर के लिए धन्यवाद ... लेकिन क्या आपने यह नहीं देखा कि अन्य उत्तरों वही हैं जो आपने उत्तर दिया ... – Bharatesh

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