JSON से जावा वर्ग उत्पन्न करें?


215

जावा मावेन परियोजना में, आप JSON से जावा स्रोत फ़ाइलों को कैसे उत्पन्न करते हैं? उदाहरण के लिए हमारे पास है

{
  "firstName": "John",  
  "lastName": "Smith",  
  "address": {  
    "streetAddress": "21 2nd Street",  
     "city": "New York"
  }
}

जब हम चलाते हैं mvn generate-sourcesतो हम चाहते हैं कि यह कुछ इस तरह से उत्पन्न हो:

class Address  {
    JSONObject mInternalJSONObject;

    Address (JSONObject json){
        mInternalJSONObject = json;
    }

    String  getStreetAddress () {
        return mInternalJSONObject.getString("streetAddress");
    }

    String  getCity (){
        return mInternalJSONObject.getString("city");
    }
}

class Person {        
    JSONObject mInternalJSONObject;

    Person (JSONObject json){
        mInternalJSONObject = json;
    }

    String  getFirstName () {
        return mInternalJSONObject.getString("firstName");
    }

    String  getLastName (){
        return mInternalJSONObject.getString("lastName");
    }

    Address getAddress (){
        return Address(mInternalJSONObject.getString("address"));
    }
}

एक जावा डेवलपर के रूप में, इसे बनाने के लिए मुझे XML की किन लाइनों को लिखने की आवश्यकता pom.xmlहै?


मैंने उन्हें विषय पर बनाने के लिए प्रश्न और उत्तर अपडेट किया है। कृपया पुनः खोलें।
एलेक्स आर

जवाबों:


269

प्रयास करें jsonschema2pojo प्लग-इन:

        <plugin>
            <groupId>org.jsonschema2pojo</groupId>
            <artifactId>jsonschema2pojo-maven-plugin</artifactId>
            <version>1.0.2</version>
            <configuration>
                <sourceDirectory>${basedir}/src/main/resources/schemas</sourceDirectory>
                <targetPackage>com.myproject.jsonschemas</targetPackage>
                <sourceType>json</sourceType>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

<sourceType>json</sourceType>कवर मामले में जहां स्रोतों (ओपी) की तरह json हैं। यदि आपके पास वास्तविक json स्कीमा है , तो इस लाइन को हटा दें।

2020 में अपडेट किया गया। यह प्रश्न पूछे जाने पर दो बातें '09 के बाद से हुई हैं:

  • JSON स्कीमा कल्पना एक बहुत पर ले जाया गया है। यह अभी भी मसौदे में है (अंतिम रूप से नहीं) लेकिन यह पूरा होने के करीब है और अब यह एक व्यवहार्य उपकरण है जो आपके संरचनात्मक नियमों को निर्दिष्ट करता है

  • मैंने हाल ही में एक नई ओपन सोर्स परियोजना शुरू की है जिसका उद्देश्य विशेष रूप से आपकी समस्या को हल करना है: jsonschema2pojo । Jsonschema2pojo टूल एक json स्कीमा दस्तावेज़ लेता है और डीटीओ-स्टाइल जावा क्लासेस (.java स्रोत फ़ाइलों के रूप में) उत्पन्न करता है। परियोजना अभी तक परिपक्व नहीं है, लेकिन पहले से ही json स्कीमा के सबसे उपयोगी भागों का कवरेज प्रदान करती है। मैं विकास को चलाने में मदद करने के लिए उपयोगकर्ताओं से अधिक प्रतिक्रिया की तलाश कर रहा हूं। अभी आप कमांड लाइन से या मावेन प्लगइन के रूप में टूल का उपयोग कर सकते हैं।

उम्मीद है की यह मदद करेगा!


4
क्या आपके jsonschema2pojo टूल का इस्तेमाल करने वाले को अपनी स्कीमा फ़ाइल तब नहीं लिखनी होगी? ओपी ने एक JSON फ़ाइल से शुरू करने के लिए कहा, स्कीमा नहीं। क्या Json -> स्कीमा से जाने के लिए एक साथी उपकरण है? मुझे लगता है कि इस तरह के एक उपकरण, अगर यह अस्तित्व में है, केवल एक अनुमान प्रदान कर सकता है।
जेफ एक्सल्रॉड

3
संस्करण 0.3.3 के रूप में, आप इनपुट के रूप में सादे पुराने JSON का उपयोग कर सकते हैं :)
joelittlejohn

14
... और अब एक ऑनलाइन जेनरेटर भी है: jsonschema2pojo.org
joelittlejohn

2
उत्कृष्ट उपकरण। आपूर्ति की गई लिंक में एक ऑनलाइन टूल है जहां आप नमूना JSON में पेस्ट कर सकते हैं, एक बटन क्लिक करें और जावा स्रोत प्राप्त करें।
mbmast

1
@testerjoe यदि आपका मतलब जावा सोर्स कोड है, तो हाँ jsonschema2pojo ऐसा करता है, और यह मावेन प्लगइन, चींटी टास्क, ग्रेडल एक्सटेंशन, सीएलआई टूल, जावा लाइब्रेरी इत्यादि के रूप में उपलब्ध है ...
joonsaturjohn

21

यदि आप जैक्सन (वहां का सबसे लोकप्रिय पुस्तकालय) का उपयोग कर रहे हैं, तो प्रयास करें

https://github.com/astav/JsonToJava

इसका खुला स्रोत और किसी को भी योगदान करने में सक्षम होना चाहिए।

सारांश

एक JsonToJava स्रोत वर्ग फ़ाइल जनरेटर जो आपूर्ति नमूना नमूना डेटा के आधार पर स्कीमा को घटाता है और आवश्यक डेटा डेटा संरचना उत्पन्न करता है।

यह वास्तविक कोड लिखने से पहले टीमों को पहले जोंस में सोचने के लिए प्रोत्साहित करता है।

विशेषताएं

  • मनमाने ढंग से जटिल पदानुक्रम (पुनरावर्ती) के लिए कक्षाएं उत्पन्न कर सकते हैं
  • अपने मौजूदा जावा कक्षाओं को पढ़ सकते हैं और अगर यह उन संरचनाओं में शामिल हो सकता है, तो ऐसा करेगा
  • अस्पष्ट मामलों के मौजूद होने पर उपयोगकर्ता इनपुट के लिए संकेत देगा

13

यहां एक ऑनलाइन टूल है जो JSON लेगा, जिसमें नेस्टेड ऑब्जेक्ट्स या ऑब्जेक्ट्स के नेस्टेड एरर्स शामिल हैं और जैक्सन एनोटेशन के साथ जावा सोर्स जेनरेट करते हैं।


1
इसने पहली बार में मेरे लिए बहुत अच्छा काम किया। मैंने जेन्सन को गहराई से निहारा था और यह ठीक काम किया था, हालांकि मुझे 2k से नीचे का समग्र आकार प्राप्त करने के लिए अनावश्यक भागों को ट्रिम करना पड़ा था। मुझे लिखने में सक्षम: MyClass c = new MyClass (); c = gson.fromJson (c.getHTML (someURLthatReturnsJSON), MyClass.class); और परिणामी डेटा पूरी तरह से प्रवाहित हुआ। मुझे उन सभी जैक्सन नोटेशन को हटाना था, लेकिन अन्यथा यह गन्स के लिए ठीक काम करता था। धन्यवाद।
noogrub

धन्यवाद, यह काम करता है। जब मैंने केस-संवेदी क्षेत्रों के साथ एक JSON खिलाया, तो इस साइट ने एक परिणाम दिया, जबकि www.jsonschema2pojo.org ने एक त्रुटि की सूचना दी।
कूलमाइंड

6

हाल के प्रोजेक्ट के साथ इस पुराने सवाल का जवाब; ;-)

फिलहाल सबसे अच्छा समाधान शायद JsonSchema2Pojo है :

यह जॉन्स स्कीमा का उपयोग शायद ही कभी प्लेन जोंस के साथ करता है। यह चींटी और मावेन प्लगइन प्रदान करता है और एक ऑनलाइन परीक्षण एप्लिकेशन आपको उपकरण का विचार दे सकता है। मैंने एक Json ट्वीट डाला और सभी युक्त वर्ग (ट्वीट, उपयोगकर्ता, स्थान, आदि) को उत्पन्न किया।

हम सोशल मीडिया मैपिंग उत्पन्न करने और उनके एपीआई में प्रतियोगी विकास का पालन करने के लिए अग्रवा परियोजना पर इसका उपयोग करेंगे ।


यह भी मेरी धारणा है, लेकिन मैंने अभी तक मावेन प्लगइन की कोशिश नहीं की, हालांकि ऑनलाइन संस्करण बहुत धीमा है और सामान्य व्यक्ति वर्ग के अलावा किसी भी चीज़ के लिए मर जाता है ... इसलिए त्वरित ऑनलाइन रूपांतरण के लिए, @ टिम-बौडर्यू के टूल ने सबसे अच्छा काम किया मुझे।
ग्रेगर

मैंने JsonSchema2Pojo की कोशिश की, लेकिन पूर्वावलोकन बटन मारने से रिक्त पूर्वावलोकन पॉप हो जाता है।
AndroidDev

5

सभी को धन्यवाद, जिन्होंने मदद करने का प्रयास किया।
मेरे लिए यह स्क्रिप्ट मददगार थी। यह केवल फ्लैट JSON की प्रक्रिया करता है और प्रकारों की देखभाल नहीं करता है, लेकिन कुछ दिनचर्या को स्वचालित करता है

  String str = 
        "{"
            + "'title': 'Computing and Information systems',"
            + "'id' : 1,"
            + "'children' : 'true',"
            + "'groups' : [{"
                + "'title' : 'Level one CIS',"
                + "'id' : 2,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Intro To Computing and Internet',"
                    + "'id' : 3,"
                    + "'children': 'false',"
                    + "'groups':[]"
                + "}]" 
            + "}]"
        + "}";



    JSONObject json = new JSONObject(str);
    Iterator<String> iterator =  json.keys();

    System.out.println("Fields:");
    while (iterator.hasNext() ){
       System.out.println(String.format("public String %s;", iterator.next()));
    }

    System.out.println("public void Parse (String str){");
    System.out.println("JSONObject json = new JSONObject(str);");

    iterator  = json.keys();
    while (iterator.hasNext() ){
       String key = iterator.next();
       System.out.println(String.format("this.%s = json.getString(\"%s\");",key,key ));

    System.out.println("}");

5

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं खुद इसका जवाब खोजने की कोशिश करते हुए लड़खड़ा गया।

ऑनलाइन जसन-पूजो जनरेटर (जोंसॉन्ग) का उल्लेख करने वाला उत्तर अच्छा है, लेकिन मुझे कुछ ऐसा चाहिए था जो मैं कमांड लाइन पर चला सकता था और अधिक ट्वीक कर सकता था।

इसलिए मैंने JSON फ़ाइल का नमूना लेने और उसमें से POJOs उत्पन्न करने के लिए एक बहुत ही आसान रूबी स्क्रिप्ट लिखी। इसकी कई सीमाएँ हैं (उदाहरण के लिए, यह जावा आरक्षित खोजशब्दों से मेल खाने वाले क्षेत्रों के साथ नहीं है) लेकिन यह कई मामलों के लिए पर्याप्त है।

डिफ़ॉल्ट रूप से उत्पन्न कोड, जैक्सन के साथ उपयोग के लिए एनोटेट करता है, लेकिन इसे एक स्विच के साथ बंद किया जा सकता है।

आप github पर कोड पा सकते हैं: https://github.com/wotifgroup/json2pojo


2

जहां तक ​​मुझे पता है कि ऐसा कोई उपकरण नहीं है। फिर भी।

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

हालाँकि: यह एक ऐसी चीज़ है जिसका बार-बार अनुरोध किया गया है (JSON टूल प्रोजेक्ट्स की सूचियों का अनुसरण करने पर), इसलिए मुझे लगता है कि कोई व्यक्ति निकट भविष्य में ऐसा टूल लिखेगा।

इसलिए मुझे नहीं लगता कि यह प्रति से अधिक एक बुरा विचार है (यह भी: यह सभी उपयोग के मामलों के लिए एक अच्छा विचार नहीं है, यह निर्भर करता है कि आप क्या करना चाहते हैं)।


2

मुझे भी यही समस्या थी इसलिए मैंने एक छोटा सा उपकरण लिखना शुरू किया, जिससे मुझे इससे मदद मिल सके। Im साझा करने के लिए और यह स्रोत andopen।

https://github.com/BrunoAlexandreMendesMartins/CleverModels

यह JSON से JAVA, C # & Objective-c को सपोर्ट करता है।

योगदान करने के लिए स्वतंत्र महसूस करो!


2

आप GSON लाइब्रेरी भी आज़मा सकते हैं। इसकी काफी शक्तिशाली यह JSON को संग्रह, कस्टम ऑब्जेक्ट और कार्यों से भी बना सकती है। अपाचे लाइसेंस 2.0 के तहत इसका विमोचन किया गया ताकि आप इसका व्यावसायिक उपयोग भी कर सकें।

http://code.google.com/p/google-gson/


13
जावा परिभाषाएँ नहीं बनाता है
नेक्रोमन्ट

3
यह वह सवाल नहीं है जिसके बारे में
हॉप

1

मैंने एक जीथब प्रोजेक्ट Json2Java बनाया जो ऐसा करता है। https://github.com/inder123/json2java

Json2Java अनुकूलन नाम प्रदान करता है जैसे कि फ़ील्ड का नाम बदलना, और वंशानुक्रम पदानुक्रम बनाना।

मैंने कुछ अपेक्षाकृत जटिल API बनाने के लिए उपकरण का उपयोग किया है:

ग्रेकेनोट के टीएमएस एपीआई: https://github.com/inder123/gracenote-java-api

Google मैप्स जियोकोडिंग एपीआई: https://github.com/inder123/geocoding


0

@ Japher की पोस्ट में जोड़ने के लिए। यदि आप विशेष रूप से JSON से बंधे नहीं हैं, तो प्रोटोकॉल बफ़र्स चेक आउट करने लायक है।


1
प्रोटोकॉल बफ़र्स JSON से जावा ऑब्जेक्ट बनाने के तरीके पर एक जवाब के करीब भी नहीं है। बहुत कम से कम आपको प्रोटोकॉल बफ़र्स से जावा ऑब्जेक्ट बनाने के लिए एक उपकरण की सिफारिश करनी चाहिए थी।
james.garriss

0

मेरे समाधान की कोशिश करो

http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html

{
    "auctionHouse": "sample string 1",
    "bidDate": "2014-05-30T08:20:38.5426521-04:00 ",
    "bidPrice": 3,
    "bidPrice1": 3.1,
    "isYear":true
}

परिणाम जावा वर्ग

private String  auctionHouse;
private Date  bidDate;
private int  bidPrice;
private double  bidPrice1;
private boolean  isYear;

JSONObject मिलता है

auctionHouse = obj.getString("auctionHouse");
bidDate = obj.opt("bidDate");
bidPrice = obj.getInt("bidPrice");
bidPrice1 = obj.getDouble("bidPrice1");
isYear = obj.getBoolean("isYear");

JSONObject डाल दिया

obj.put("auctionHouse",auctionHouse);
obj.put("bidDate",bidDate);
obj.put("bidPrice",bidPrice);
obj.put("bidPrice1",bidPrice1);
obj.put("isYear",isYear);

यह उत्तर इतना तुच्छ लगता है। जोंस से पूजो उत्पन्न करने का स्वचालित तरीका है
राफेल रुइज़ तबरेस

0

आइए मैं आपको दिखाता हूं कि टूल कैसे बनाया जाए। आप ऐसा कर सकते हैं:

  1. उपयोगकर्ता जावास्क्रिप्ट फ़ंक्शन Json.parse (), स्ट्रिंग जैसे- json trans to js ऑब्जेक्ट बनाते हैं
  2. तब इस वस्तु का उपयोग जावबीन प्रारूप को जनरेट करने के लिए करें।
  3. कुछ। आप सावधानी से काम करते हैं। (1) वैल्यू टाइप मैपिंग, फॉरेक्सप्लिमेंट, स्ट्रिंग का पता कैसे लगाएं, डेट टाइप है। (2) loweser_case to camelCase।

मैं समस्या को हल करने के लिए एक उपकरण तैयार करता हूं। यह अच्छी तरह से डिजाइन और त्वरित है। मेरे गितुब से कोड प्राप्त करें ।

यहाँ से आनंद लें, मैंने इसे वेबसर्वर पर तैनात किया है ।

मैं शीर्ष 2 उत्तर के सुझाव का प्रयास करता हूं। कोई वेब नहीं खोल सकता है। मेरे टूल की तुलना में धीमा है। फिर भी आप मेरे टूल का आनंद लेंगे।


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
अचोमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.