POJO

2012-08-23 31 views
9

से JSON नमूना जेनरेट करें हम POJO (स्रोत या बाइनरी) के आधार पर नमूना JSON खंड उत्पन्न करने के लिए एक तरीका (शायद मौजूदा ढांचे या समान) की तलाश में हैं। उदाहरण के लिए:POJO

{ 
    "var1": "string1", 
    "var2": "string2" 
} 

किसी भी विचार:

public class foo { 
    String var1; 
    String var2; 

    public String getVar1() { return var1; } 
    public void setVar1(String var1) { this.var1 = var1; } 

    public String getVar2() { return var2; } 
    public void setVar2(String var2) { this.var2 = var2; } 
} 

एक JSON नमूना है कि ऐसा दिखाई दे सकता उपज हैं? हम निश्चित रूप से हाथ कोड कर सकते हैं। बस यह देखने के लिए देख रहे हैं कि वहां कुछ पहले से बाहर है या नहीं।

उत्तर

4

तुम भी Gson पर एक नज़र ले सकता है (यह सीधे पढ़ता/खेतों, टिककर खेल के लिए कोई ज़रूरत नहीं/setters लिखते हैं):

Foo foo = ... 
Gson gson = new Gson(); 
String json = gson.toJson(foo); 

अपने आप को एक पक्ष बनाओ और जेएसओएन (या एक्सएमएल, या किसी भी संरचित डेटा प्रारूप को हाथ से कोड न करें यदि आप इससे बच सकते हैं)। यह अनावश्यक रूप से पहिया को पुनर्निर्मित कर रहा है। किसी ने इसे पहले से ही पहले से ही हल कर लिया है, घोंसले और आपके लिए सभी प्रकार के सीमा मामलों को हल किया है।

2

GSON का उपयोग करना:

Foo foo = new Foo(); 
foo.setVar1("string1"); 
foo.setVar2("string2"); 

Gson gson = new Gson();  
String json = gson.toJson(foo); 
4

वहाँ भी एक और पुस्तकालय Genson http://code.google.com/p/genson/ कहा जाता है।

असल में जेन्सन तेज है और इसमें जीसन की तुलना में अधिक सुविधाएं हैं और जैक्सन के करीब प्रदर्शन (लेकिन यह बहुत हल्का वजन है) http://code.google.com/p/genson/wiki/Metrics देखें। यह एक डोम मॉडल के बजाय स्ट्रीमिंग एपीआई का उपयोग करता है जो बेहतर स्केलेबिलिटी लाता है और वेब अनुप्रयोगों में अच्छा है जहां आप रूपांतरण के रूप में रूपांतरण को संभालने में सक्षम हो सकते हैं।

जेन्सन सभी प्रकार के उपयोग मामलों के लिए उपयुक्त है, सरल रूपांतरण से लेकर, सभी प्रक्रियाओं के पूर्ण अनुकूलन के लिए। आप कई चीजों को कॉन्फ़िगर कर सकते हैं (फ़ील्ड्स और/या विधियों का उपयोग करें, तर्क के साथ कन्स्ट्रक्टर का उपयोग करें और बिना किसी एनोटेशन के, दृश्यता गुणों को फ़िल्टर करें और बहुत कुछ)। आपको विकी पर एक नज़र रखना चाहिए।

इसका नवीनतम संस्करण (0.91) मैवेन केंद्रीय भंडार में उपलब्ध है।

<dependency> 
    <groupId>com.owlike</groupId> 
    <artifactId>genson</artifactId> 
    <version>0.91</version> 
</dependency> 

अस्वीकरण: मैं पुस्तकालय के लेखक हूँ, लेकिन मैं वस्तुनिष्ठ होने का (विशेष रूप से मानक में) का प्रयास करें।

जीसन और जैक्सन पर कुछ शब्द संपादित करें। मैंने जैक्सन का इस्तेमाल 2 से अधिक वर्षों और थोड़ा जीसन के लिए किया है। ध्यान देने योग्य बात यह है कि जैक्सन सबसे तेज़ जेसन/जावा लाइब्रेरी है (गेसन इसे हरा करने की कोशिश करता है लेकिन यह काफी कठिन है)। जैक्सन में कई सुविधाएं और कॉन्फ़िगरेशन संभावनाएं हैं (अधिकतर एनोटेशन पर आधारित)। मेरे पास जैक्सन का मानक और उन्नत उपयोग था, और जब तक जैक्सन ने प्रदान नहीं की थी तब तक यह अच्छा था। मैंने पाया कि लाइब्रेरी का विस्तार करना मुश्किल था (मेरे उपयोग के मामलों के लिए यह एक बड़े हिस्से को फिर से लिखने के बिना असंभव था)।

मैंने फिर जीसन की कोशिश की। जीसन के बारे में ध्यान देने वाली पहली बात यह है कि यह गेटर/सेटर का उपयोग नहीं करता है बल्कि केवल फ़ील्ड! इसका प्रदर्शन अच्छा नहीं था (विशेष रूप से जैक्सन या जेन्सन की तुलना में)। नवीनतम संस्करणों के साथ इसमें सुधार हुआ है क्योंकि वे एक स्ट्रीमिंग एपीआई भी प्रदान करते हैं, लेकिन यह अभी भी पर्याप्त तेज़ नहीं है।शुरुआत में इसका मुख्य लाभ जावा जेनरिक का अच्छा समर्थन था लेकिन जैक्सन और जेन्सन भी इसे प्रदान करते हैं। ध्यान दें कि जीसन जेन्सन या जैक्सन की तुलना में बॉक्स से कम सुविधाओं के साथ आता है। मैंने जीसन में आवश्यक सुविधाओं को लागू करने की भी कोशिश की लेकिन मुझे पता चला कि बीन्स डाटाबेसिंग हिस्सा एक्स्टेंसिबल नहीं था (बिना किसी एक्सटेंशन वाले सिंगल क्लास में सब कुछ के पास), इसलिए मुझे इसे फिर से लिखना होगा। यह सवाल से बाहर था और यह कि मैं कैसे गेंसन बनाने के साथ समाप्त हुआ।

यदि आप जेन्सन का उपयोग नहीं करना चाहते हैं, तो मैं वास्तव में आपको जैक्सन पर जैक्सन की सलाह देता हूं।

2

नोट: मैं EclipseLink JAXB (MOXy) लीड और JAXB (JSR-222) विशेषज्ञ समूह का सदस्य हूं।

आप अपने ऑब्जेक्ट मॉडल को JSON (और/या XML) में परिवर्तित करने के लिए EclipseLink JAXB (MOXy) का उपयोग कर सकते हैं। नीचे एक पूरा उदाहरण है।

jaxb.properties

अपने JAXB प्रदाता के रूप में MOXY निर्दिष्ट करने के लिए आप एक फ़ाइल में निम्न प्रविष्टि के साथ अपने डोमेन मॉडल के रूप में एक ही पैकेज में jaxb.properties बुलाया शामिल करने की जरूरत है (देखें: http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)।

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

डेमो

नीचे डेमो कोड foo का एक उदाहरण से JSON उत्पादन का उत्पादन करने के लिए इस्तेमाल किया जा सकता। ध्यान दें कि केवल मानक जेएक्सबी एपीआई का उपयोग कैसे किया जाता है। JAXB एपीआई अधिक जानकारी के लिए जावा SE 6.

package forum12101023; 

import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(foo.class); 

     foo foo = new foo(); 
     foo.setVar1("string1"); 
     foo.setVar2("string2"); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty("eclipselink.media-type", "application/json"); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(foo, System.out); 
    } 

} 

आउटपुट

{ 
    "var1" : "string1", 
    "var2" : "string2" 
} 

के बाद से JDK/आरई में रहे हैं

0

आप इसे करने के लिए जीसन का उपयोग कर सकते हैं। एक विस्तार विवरण के लिए

Gson gson = new Gson(); 
String fooJSON= gson.toJson(foo); 

चेक this लिंक भी कैसे जे एस/ExtJS में यह करने के लिए और भी JSON से deserializing POJO को