2012-12-06 34 views
6

मेरे पास एक साधारण JSON कथन है जिस प्रकार बहुत आवश्यकता है। इसजावा पॉजो क्लास में जेसन ऑब्जेक्ट को मैं कैसे बेकार कर सकता हूं?

{ 
     actor:{name:"kumar",mbox:"[email protected]"} 
     verb :"completed" 
    } 

या

{ 
     actor:{name:["kumar","manish"],mbox:["[email protected]","[email protected]"]} 
     verb :{ 
      "id" : "http://adlnet.gov/expapi/verbs/completed", 
     "display" : { 
      "en-US" : "completed" 
     } 
    } 

की तरह मैं इस json स्ट्रिंग और POJO वर्ग कोड मैप करने के लिए POJO वर्ग का उपयोग कर का उपयोग कर रहा bleow

@JsonProperty("actor") 
Actor actor; 
@JsonProperty("verb") 
Verb objVerb; 
@JsonProperty("verb") 
String verb; 
public Actor getActor() { 
    return actor; 
} 
public void setActor(Actor actor) { 
    this.actor = actor; 
} 
public Verb getObjVerb() { 
    return objVerb; 
} 
public void setObjVerb(Verb objVerb) { 
    this.objVerb = objVerb; 
} 
@JsonIgnore 
public String getVerb() { 
    return verb; 
} 
@JsonIgnore 
public void setVerb(String verb) { 
    this.verb = verb; 
} 
public static class Actor { 
    String objectType; 
    @JsonProperty("name") 
    ArrayList<String> listName; 
    @JsonProperty("name") 
    String name; 
    @JsonProperty("mbox") 
    ArrayList<String> listMbox; 
    @JsonProperty("mbox") 
    String mbox; 
    @JsonProperty("mbox_sha1sum") 
    ArrayList<String> Listmbox_sha1sum; 
    @JsonProperty("mbox_sha1sum") 
    String mbox_sha1sum; 
    @JsonProperty("openid") 
    String openid; 
    @JsonProperty("account") 
    Account account; 
    public String getObjectType() { 
     return objectType; 
    } 

    public void setObjectType(String objectType) { 
     this.objectType = objectType; 
    } 

    public ArrayList<String> getListName() { 
     return listName; 
    } 

    public void setListName(ArrayList<String> listName) { 
     this.listName = listName; 
    } 
    @JsonIgnore 
    public String getName() { 
     return name; 
    } 
    @JsonIgnore 
    public void setName(String name) { 
     this.name = name; 
    } 

    public ArrayList<String> getListMbox() { 
     return listMbox; 
    } 

    public void setListMbox(ArrayList<String> listMbox) { 
     this.listMbox = listMbox; 
    } 
    @JsonIgnore 
    public String getMbox() { 
     return mbox; 
    } 
    @JsonIgnore 
    public void setMbox(String mbox) { 
     this.mbox = mbox; 
    } 

    public ArrayList<String> getListmbox_sha1sum() { 
     return Listmbox_sha1sum; 
    } 

    public void setListmbox_sha1sum(ArrayList<String> listmbox_sha1sum) { 
     Listmbox_sha1sum = listmbox_sha1sum; 
    } 
    @JsonIgnore 
    public String getMbox_sha1sum() { 
     return mbox_sha1sum; 
    } 
    @JsonIgnore 
    public void setMbox_sha1sum(String mbox_sha1sum) { 
     this.mbox_sha1sum = mbox_sha1sum; 
    } 

    public String getOpenid() { 
     return openid; 
    } 

    public void setOpenid(String openid) { 
     this.openid = openid; 
    } 

    public Account getAccount() { 
     return account; 
    } 

    public void setAccount(Account account) { 
     this.account = account; 
    } 

    public static class Account { 
     @JsonProperty("homePage") 
     String homePage; 
     @JsonProperty("name") 
     String name; 
     public String getHomePage() { 
      return homePage; 
     } 
     public void setHomePage(String homePage) { 
      this.homePage = homePage; 
     } 
     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
    } 
} 
public static class Verb { 
    String id; 
    Map<String,String> display; 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public Map<String, String> getDisplay() { 
     return display; 
    } 
    public void setDisplay(Map<String, String> display) { 
     this.display = display; 
    } 
} 

मैं JAXB और jakson उपयोग कर रहा हूँ दिया जाता है। मैं json कथन को संभालने के लिए webservice को कार्यान्वित कर रहा हूं इसलिए मैं जेसन के साथ मैप करने के लिए बीन क्लास का उपयोग करता हूं। लेकिन जब मैं इस json मैप करने के लिए उपयोग करते हैं तो यह निम्न अपवादों देता

org.codehaus.jackson.map.JsonMappingException: नाम "mbox" के साथ संपत्ति दो प्रविष्टि है।

एक उचित सेम संरचना को परिभाषित करें तो यह सीधे सेम वर्ग

+0

कृपया समाधान –

+1

डॉन प्रदान करें, "कृपया, मेरी मदद करें आदि" जैसे शब्दों का उपयोग करें। इसकी बजाय आपकी समस्या को स्पष्ट रूप से समझाएं और अपने प्रयासों को लिखें कि आपने अपनी समस्या को हल करने का प्रयास कैसे किया। और अगर आपको समाधान मिल गया तो अपना जवाब स्वीकार या पोस्ट करें। –

उत्तर

1

कोशिश करने के लिए मैप किया गया केवल @JsonProperty("mbox") ArrayList<String> listMbox; क्षेत्र छोड़ने के लिए (@JsonProperty("mbox") String mbox; जरूरत नहीं है) और जैक्सन वस्तु नक्शाकार config को Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true जोड़ें।

तो deserialization में यह दोनों सरणी और एकल तत्व के रूप में प्राप्त करने में सक्षम हो जाएगा।

+0

लेकिन क्रिया के लिए मैं क्या कर सकता हूं। और यह अपवाद भी उत्पन्न करता है। –

+0

क्या अपवाद? क्रिया के बारे में: मुझे नहीं पता। क्या आप एक जेसन की सिंटैक्स/संरचना नहीं बदल सकते हैं? यह बहुत अच्छा समाधान नहीं है लेकिन आप '@ जेसनप्रोपर्टी ("क्रिया") ऑब्जेक्ट objVerb का उपयोग कर सकते हैं;', और deserialization पर यह एक मामले में होगा दूसरे मानचित्र में स्ट्रिंग (आप कास्ट कर सकते हैं)। – adsurbum

0

आप जीसन का उपयोग कर सकते हैं।

कक्षा cls = gson.fromJson (jsonString, clazz);

यहां jsonString जावा स्क्रिप्ट ऑब्जेक्ट को स्ट्रिंग किया जा सकता है। gson.fromJson विधि जावा जावा स्क्रिप्ट कुंजी को जावा प्रॉपर्टी पर मैप कर सकती है।