JSON থেকে জাভা ক্লাস উত্পন্ন?


215

একটি জাভা মাভেন প্রকল্পে, আপনি কীভাবে জেএসএন থেকে জাভা উত্স ফাইলগুলি তৈরি করবেন? যেমন আমাদের আছে

{
  "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"));
    }
}

একটি জাভা বিকাশকারী হিসাবে, pom.xmlএটি ঘটানোর জন্য আমার নিজের 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 হয়। আপনার যদি বাস্তব জেসন স্কিমা থাকে তবে এই লাইনটি সরিয়ে দিন।

2020-এ আপডেট হয়েছে Dec ডিসেম্বর '9-এর পর থেকে দুটি বিষয় ঘটেছে যখন এই প্রশ্নটি করা হয়েছিল:

  • তাদেরকে JSON স্কিমা বৈশিষ্ট অনেক সরানো হয়েছে। এটি এখনও খসড়ায় রয়েছে (চূড়ান্ত হয়নি) তবে এটি সমাপ্তির কাছাকাছি এবং এখন আপনার কাঠামোগত নিয়মগুলি উল্লেখ করে একটি কার্যকর সরঞ্জাম

  • আপনার সমস্যাটি সমাধান করার উদ্দেশ্যে আমি সম্প্রতি একটি নতুন ওপেন সোর্স প্রকল্প শুরু করেছি: jsonschema2pojo । Jsonschema2pojo সরঞ্জামটি একটি জসন স্কিমা ডকুমেন্ট নেয় এবং ডিটিও-স্টাইল জাভা ক্লাসগুলি তৈরি করে (। জাভা উত্স ফাইলগুলির আকারে)। প্রকল্পটি এখনও পরিপক্ক নয় তবে ইতিমধ্যে জেসন স্কিমার সবচেয়ে দরকারী অংশগুলির কভারেজ সরবরাহ করে। বিকাশটি চালাতে সহায়তার জন্য আমি ব্যবহারকারীদের আরও প্রতিক্রিয়া খুঁজছি। এখনই আপনি কমান্ড লাইন থেকে বা ম্যাভেন প্লাগইন হিসাবে সরঞ্জামটি ব্যবহার করতে পারেন।

আশাকরি এটা সাহায্য করবে!


4
আপনার jsonschema2pojo সরঞ্জামটি ব্যবহার করা কেউ যদি নিজের স্কিমা ফাইলটি তখন লেখেন না? ওপি কোনও স্কিমা নয়, একটি জাসন ফাইল দিয়ে শুরু করতে বলেছিল। জেসন -> স্কিমা থেকে যাওয়ার কোনও সঙ্গী সরঞ্জাম রয়েছে কি? আমি ধরে নিই যে এই জাতীয় সরঞ্জামটি যদি বিদ্যমান থাকে তবে কেবল অনুমান সরবরাহ করতে পারত।
জেফ অ্যাক্সেলরড

3
সংস্করণ 0.3.3 হিসাবে, আপনি ইনপুট হিসাবে সরল পুরানো জেএসএন ব্যবহার করতে পারেন :)
joelittlejohn

14
... এবং এখন একটি অনলাইন জেনারেটরও রয়েছে: jsonschema2pojo.org
joelittlejohn

2
দুর্দান্ত সরঞ্জাম সরবরাহিত লিঙ্কটিতে একটি অনলাইন সরঞ্জাম রয়েছে যেখানে আপনি নমুনা JSON এ পেস্ট করতে পারেন, একটি বোতামে ক্লিক করুন এবং জাভা উত্স পেতে পারেন।
এমবিমাষ্ট

1
@testerjoe আপনি জাভা সোর্স কোড এর অর্থ, তাহলে হ্যাঁ jsonschema2pojo এই আছে, এবং এটি একটি ম্যাভেন প্লাগইন, পিপীলিকা টাস্ক gradle এক্সটেনশন, CLI টুল, জাভা গ্রন্থাগার, ইত্যাদি উপলব্ধ ...
joelittlejohn

21

আপনি যদি জ্যাকসন (সেখানকার সর্বাধিক জনপ্রিয় লাইব্রেরি) ব্যবহার করছেন তবে চেষ্টা করুন

https://github.com/astav/JsonToJava

এর ওপেন সোর্স এবং যে কারও অবদান রাখতে সক্ষম হওয়া উচিত।

সারসংক্ষেপ

একটি জসনটোজাভা উত্স শ্রেণীর ফাইল জেনারেটর যা সরবরাহিত নমুনা জেসন ডেটার উপর ভিত্তি করে স্কিমাটি হ্রাস করে এবং প্রয়োজনীয় জাভা ডেটা কাঠামো উত্পন্ন করে।

এটি দলগুলিকে আসল কোড লেখার আগে প্রথমে জসনে চিন্তা করতে উত্সাহিত করে।

বৈশিষ্ট্য

  • একটি নির্বিচারে জটিল শ্রেণিবিন্যাসের জন্য ক্লাস উত্পন্ন করতে পারে (পুনরাবৃত্তভাবে)
  • আপনার বিদ্যমান জাভা ক্লাসগুলি পড়তে পারে এবং যদি সেগুলি এই কাঠামোগুলির deserialize করতে পারে তবে এটি করবে
  • অস্পষ্ট ক্ষেত্রে উপস্থিত থাকলে ব্যবহারকারী ইনপুটটির জন্য অনুরোধ জানাবে

13

এখানে একটি অনলাইন সরঞ্জাম যা জেএসওন নেবে, নেস্টেড অবজেক্টস বা নেস্টেড অবজেক্টস অবজেক্টস এবং জ্যাকসন টিকা সহ জাভা উত্স তৈরি করবে।


1
এটি প্রথম যেতে যেতে আমার পক্ষে খুব ভাল কাজ করেছে। আমি জেএসনকে গভীরভাবে ঘৃণা করেছি এবং এটি দুর্দান্ত কাজ করেছে, যদিও সামগ্রিক আকার 2k এর নীচে পেতে আমাকে অপ্রয়োজনীয় অংশগুলি ছাঁটাই করতে হয়েছিল। আমাকে লিখতে সক্ষম করেছেন: মাইক্লাস সি = নতুন মাইক্লাস (); c = gson.fromJson (c.getHTML (someURLthatReturnsJSON), MyClass.class); এবং ফলাফল তথ্য পুরোপুরি প্রবাহিত। আমাকে জ্যাকসনের সমস্ত স্বরলিপিগুলি সরিয়ে ফেলতে হয়েছিল, তবে অন্যথায় এটি জিএসনের পক্ষে ভাল কাজ করেছে। ধন্যবাদ.
সংখ্যা

ধন্যবাদ, এটি কাজ করে। আমি যখন কেস-সংবেদনশীল ক্ষেত্রগুলি দিয়ে একটি জেএসএনকে ফিড করেছি, তখন এই সাইটটি একটি ফল ফিরে পেয়েছিল, অন্যদিকে www.jsonschema2pojo.org ত্রুটির কথা জানিয়েছে।
কুলমাইন্ড

6

সাম্প্রতিক প্রকল্প ;-) সহ এই পুরানো প্রশ্নের উত্তর দেওয়া।

এই মুহূর্তে সর্বোত্তম সমাধানটি সম্ভবত জাসনস্কেমা 2 পজো :

এটি খুব কমই ব্যবহার করা জসন স্কিমা থেকে কাজটি করে তবে সরল জসন দিয়ে কাজ করে। এটি পিপীলিকা এবং ম্যাভেন প্লাগইন সরবরাহ করে এবং একটি অনলাইন পরীক্ষামূলক অ্যাপ্লিকেশন আপনাকে সরঞ্জামটির ধারণা দিতে পারে। আমি একটি জসন টুইট রেখে সমস্ত ধারণকৃত ক্লাস (টুইট, ব্যবহারকারী, অবস্থান, ইত্যাদি) উত্পন্ন করেছি।

আমরা এটি সোশ্যাল মিডিয়া ম্যাপিং উত্পন্ন করতে এবং তাদের এপিআইতে বিপরীত বিবর্তন অনুসরণ করতে আগোরভা প্রকল্পে ব্যবহার করব ।


এটি আমার ধারণাও, তবে আমি এখনও ম্যাভেন প্লাগইনটি চেষ্টা করিনি, তবে অনলাইন সংস্করণটি খুব ধীর এবং স্বাভাবিক ব্যক্তি শ্রেণি ব্যতীত অন্য কোনও কিছুর জন্য মারা যায় ... তাই দ্রুত অনলাইন রূপান্তরকরণের জন্য, @ টিম-বউদ্রেউর সরঞ্জামটি সবচেয়ে ভাল কাজ করেছে আমাকে.
গ্রেগোর 20

আমি জসনস্কেমা 2 পজোর চেষ্টা করেছিলাম তবে প্রাকদর্শন বোতামটি চাপানো খালি প্রাকদর্শনটিকে পপ আপ করে।
অ্যান্ড্রয়েড ডেভ

5

যারা সাহায্য করার চেষ্টা করেছেন তাদের সবাইকে ধন্যবাদ।
আমার জন্য এই স্ক্রিপ্ট সহায়ক ছিল। এটি কেবল ফ্ল্যাট জেএসএন প্রসেস করে এবং ধরণের যত্ন নেবে না, তবে কিছু রুটিন স্বয়ংক্রিয়ভাবে প্রবর্তন করে

  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 ফাইল নিতে এবং এটি থেকে POJO জেনারেট করার জন্য খুব হাবী রুবি স্ক্রিপ্ট লিখেছিলাম। এটির অনেকগুলি সীমাবদ্ধতা রয়েছে (উদাহরণস্বরূপ, এটি জাভা সংরক্ষিত কীওয়ার্ডগুলির সাথে মেলে এমন ক্ষেত্রগুলির সাথে কাজ করে না) তবে এটি বেশ কয়েকটি ক্ষেত্রে যথেষ্ট।

ডিফল্টরূপে উত্পন্ন কোডটি জ্যাকসনের সাথে ব্যবহারের জন্য টিকা দেয় তবে এটি একটি স্যুইচ দিয়ে বন্ধ করা যেতে পারে।

আপনি গিথুবে কোডটি খুঁজে পেতে পারেন: https://github.com/wotifgroup/json2pojo


2

আমি যতদূর জানি এ জাতীয় কোনও সরঞ্জাম নেই। এখনো.

এর মূল কারণটি হ'ল আমার সন্দেহ, এক্সএমএল (যার এক্সএমএল স্কিমা রয়েছে এবং তারপরে এক্সএক্সসি) এর মতো সরঞ্জামগুলি এক্সএমএল এবং পোজোর সংজ্ঞাগুলির মধ্যে রয়েছে) এর পুরোপুরি বৈশিষ্ট্যযুক্ত স্কিমা ভাষা নেই। এখানে জেএসএন স্কিমা রয়েছে, তবে এটির প্রকৃত ধরণের সংজ্ঞা (জেএসএন স্ট্রাকচারগুলিতে মনোনিবেশ করা) এর জন্য খুব কম সমর্থন রয়েছে, তাই জাভা ক্লাসগুলি তৈরি করা জটিল হবে। তবে সম্ভবত এখনও সম্ভব, esp। যদি কিছু নামকরণের সম্মেলনগুলি সংজ্ঞায়িত করা হয় এবং প্রজন্মকে সমর্থন করতে ব্যবহৃত হয়।

তবে: এটি এমন একটি বিষয় যা প্রায়শই অনুরোধ করা হয়েছিল (আমি অনুসরণ করি JSON সরঞ্জাম প্রকল্পগুলির মেলিং তালিকায়), সুতরাং আমি মনে করি যে অদূর ভবিষ্যতে কেউ এই জাতীয় একটি সরঞ্জাম লিখবেন।

সুতরাং আমি মনে করি না যে এটি প্রতি সে ক্ষেত্রে একটি খারাপ ধারণা (এছাড়াও: এটি সমস্ত ব্যবহারের ক্ষেত্রে ভাল ধারণা নয়, আপনি যা করতে চান তার উপর নির্ভর করে)।


2

আমারও একই সমস্যা ছিল তাই আমি এটিকে সাহায্য করার জন্য একটি ছোট সরঞ্জাম লেখা শুরু করার সিদ্ধান্ত নিয়েছি। আমি এটি শেয়ার করে ওপেন করব share

https://github.com/BrunoAlexandreMendesMartins/CleverModels

এটি JSON থেকে JAVA, C # এবং উদ্দেশ্য-সি সমর্থন করে।

অবদান নির্দ্বিধায়!


2

আপনি জিএসওএন লাইব্রেরিও চেষ্টা করতে পারেন। এটি বেশ শক্তিশালী এটি সংগ্রহ, কাস্টম অবজেক্ট থেকে জেএসএন তৈরি করতে পারে এবং বিপরীতে কাজ করে। এটি অ্যাপাচি লাইসেন্স 2.0 এর আওতায় প্রকাশিত হয়েছে যাতে আপনি এটি বাণিজ্যিকভাবেও ব্যবহার করতে পারেন।

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


13
জাভা সংজ্ঞা তৈরি করে না
নেক্রোমেন্সার

3
এই প্রশ্নটি যা হয় তা নয়
হপ

1

আমি গিথুব প্রজেক্ট জসন 2 জাভা তৈরি করেছি যা এটি করে। https://github.com/inder123/json2java

জসন 2 জাভা ক্ষেত্রের নামকরণ এবং উত্তরাধিকারের স্তরক্রম তৈরি করার মতো কাস্টমাইজেশন সরবরাহ করে।

আমি কিছু অপেক্ষাকৃত জটিল এপিআই তৈরি করতে এই সরঞ্জামটি ব্যবহার করেছি:

গ্রেসেনোটের টিএমএস এপিআই: https://github.com/inder123/gracenote-java-api

গুগল ম্যাপস জিওকোডিং এপিআই: https://github.com/inder123/geocoding


0

@ জাপারের পোস্টে যুক্ত করতে। আপনি যদি জেএসএনের সাথে বিশেষভাবে আবদ্ধ না হন তবে প্রোটোকল বাফারগুলি পরীক্ষা করে দেখার মতো।


1
প্রোটোকল বাফারস জেএসএন থেকে জাভা অবজেক্টগুলি কীভাবে তৈরি করবেন সে সম্পর্কে একটি উত্তরের কাছেও নেই। প্রোটোকল বাফার থেকে জাভা অবজেক্ট তৈরি করার জন্য খুব কমপক্ষে আপনার কোনও সরঞ্জামের পরামর্শ দেওয়া উচিত ছিল।
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");

জেএসএনওবজেক্ট রাখুন

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

এই উত্তরটি খুব তুচ্ছ দেখাচ্ছে। জসন থেকে পোজো উত্পন্ন করার জন্য স্বয়ংক্রিয় উপায় রয়েছে
রাফায়েল রুইজ তাবারেস

0

কীভাবে টুলটি ডিভ করতে হয় তা আমি আপনাকে দেখাতে পারি y আপনি এটি করতে পারেন:

  1. ব্যবহারকারীর জাভাস্ক্রিপ্ট ফাংশন Json.parse (), স্ট্রিং যেমন js অবজেক্টে জসন ট্রান্স তৈরি করুন
  2. তারপরে জাভাবিন ফর্ম্যাটটি উত্পন্ন করতে এই বস্তুটি ব্যবহার করুন।
  3. কিছু , আপনি যত্নবান হন।

আমি সমস্যার সমাধান করার জন্য একটি সরঞ্জাম দেব it এটি নকশা করা এবং আরও দ্রুত। আমার থেকে কোড পাওয়ার GitHub

এখান থেকে উপভোগ করুন, আমি এটি ওয়েবসভারে স্থাপন করেছি ।

আমি শীর্ষ 2 টির উত্তরের পরামর্শটি চেষ্টা করি one কোনও ওয়েব খুলতে পারে না oneআপনি আমার সরঞ্জামের চেয়ে ধীর .h


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
অ্যাক্রোম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.