2012-06-07 12 views
20

में मॉडल वर्गों से सीधे वस्तुओं मैं कुछ मॉडल वर्गों Customer की तरह, Product, आदि अपने प्रोजेक्ट जो कई क्षेत्रों और उनके सेटर-गेटर तरीकों में है, मैं एक JSONObject के रूप में इन वर्गों के विनिमय वस्तुओं की जरूरत है क्लाइंट और सर्वर से और सॉकेट के माध्यम से।बनाना JSON जावा

क्या कोई तरीका है कि मैं मॉडल श्रेणी के ऑब्जेक्ट से सीधे JSONObject बना सकता हूं जैसे ऑब्जेक्ट के फ़ील्ड कुंजी बन जाते हैं और उस मॉडल क्लास ऑब्जेक्ट के मान इस JSONObject के मान बन जाते हैं।

उदाहरण:

Customer c = new Customer(); 
c.setName("Foo Bar"); 
c.setCity("Atlantis"); 
..... 
/* More such setters and corresponding getters when I need the values */ 
..... 

और मैं JSON वस्तु बनाने के रूप में:

JSONObject jsonc = new JSONObject(c); //I'll use this only once I'm done setting all values. 

कौन सा मेरे जैसे कुछ हो जाता है:

{"name":"Foo Bar","city":"Atlantis"...} 

कृपया ध्यान दें कि, मेरे मॉडल वर्गों में से कुछ में , कुछ गुण स्वयं अन्य मॉडल वर्ग का एक ऑब्जेक्ट हैं । जैसे:

Product p = new Product(); 
p.setName("FooBar Cookies"); 
p.setProductType("Food"); 
c.setBoughtProduct(p); 

से ऊपर, के रूप में मैं उम्मीद थी की तरह एक मामले में, झुकेंगे JSON ऑब्जेक्ट होगा:

{"name":"Foo Bar","city":"Atlantis","bought":{"productname":"FooBar Cookies","producttype":"food"}} 

मैं जानता हूँ कि मैं एक मॉडल कक्षा में toJSONString() की तरह कुछ बना सकते हैं और है JSON- अनुकूल स्ट्रिंग ने तब बनाया और इसका उपयोग किया, लेकिन जावा में रीस्टफुल सेवा बनाने के अपने पिछले अनुभवों में (जो इस प्रश्न के संदर्भ में पूरी तरह से बाहर है), मैं @Produces(MediaType.APPLICATION_JSON) का उपयोग करके सेवा विधि से जेएसओएन स्ट्रिंग वापस कर सकता हूं और विधि मॉडल वर्ग की वापसी वस्तु। इसलिए यह JSON स्ट्रिंग का उत्पादन करता है जिसे मैं क्लाइंट एंड पर उपभोग कर सकता हूं।

मैं सोच रहा था कि वर्तमान परिदृश्य में समान व्यवहार प्राप्त करना संभव है या नहीं।

कोई मदद या सुझाव की सराहना की है। धन्यवाद।

उत्तर

22

Google GSON इस करता है, मैंने इसे कई परियोजनाओं पर उपयोग किया है और यह आसान है और अच्छी तरह से काम करता है। यह बिना किसी हस्तक्षेप के सरल वस्तुओं के लिए अनुवाद कर सकता है, लेकिन अनुवाद (दोनों दिशाओं में) को अनुकूलित करने के लिए एक तंत्र भी है।

Gson g = ...; 
String jsonString = g.toJson(new Customer()); 
+0

मैं json.org लाइब्रेरी से 'JSONObject' पर निर्भर हूं, तो क्या मुझे इसके लिए सिर्फ एक और लाइब्रेरी का उपयोग करना है? – Kushal

+0

जीएसओएन एन्कोडिंग और डिकोडिंग दोनों कर सकता है, इसलिए आप json.org को छोड़ सकते हैं और इसके बजाए बस जीएसओएन का उपयोग कर सकते हैं। –

+0

इसके अलावा, मैं '@XMLElement (नाम =" somekeyname ")' मॉडल वर्गों में से प्राप्त तरीकों में मेरे बाकी सेवा बात में, keynames को नियंत्रित इसे यहाँ भी काम करेगा करने के लिए इस्तेमाल? – Kushal

12

आप उस के लिए Gson उपयोग कर सकते हैं:

Maven निर्भरता:

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.8.0</version> 
</dependency> 

जावा कोड:

Customer customer = new Customer(); 
Product product = new Product(); 

// Set your values ... 

Gson gson = new Gson(); 
String json = gson.toJson(customer); 

Customer deserialized = gson.fromJson(json, Customer.class); 
1

इसे प्राप्त करने के लिए gson का उपयोग करें।आप

Product p = new Product(); 
    p.setName("FooBar Cookies"); 
    p.setProductType("Food"); 
    c.setBoughtProduct(p); 

    XStream xstream = new XStream(new JettisonMappedXmlDriver()); 
    xstream.setMode(XStream.NO_REFERENCES); 
    xstream.alias("p", Product.class); 
    String jSONMsg=xstream.toXML(product); 
    System.out.println(xstream.toXML(product)); 

जो तुम JSON स्ट्रिंग सरणी दे देंगे करने के लिए json तो

Gson gson = new Gson(); 
String json = gson.toJson(yourObject); 
+1

में कनवर्ट करने के तरीके के बारे में अधिक पंक्ति की आवश्यकता है, ओपी JSONObject – msysmilu

0

मैं XStream पार्सर का इस्तेमाल किया है प्राप्त करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं।

1
User = new User(); 
    Gson gson = new Gson(); 
    String jsonString = gson.toJson(user); 
    try { 
     JSONObject request = new JSONObject(jsonString); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

के बारे में पूछ रहा था कृपया कुछ स्पष्टीकरण जोड़ें। आपका उत्तर वर्तमान में "कम गुणवत्ता" ध्वजांकित है और अंत में हटाया जा सकता है। –

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