জাভাতে এক্সএমএলকে জেএসএনে রূপান্তর করার দ্রুততম উপায় [বন্ধ]


171

XML কে জাভায় দ্রুত এবং সহজেই JSON এ রূপান্তর করার জন্য কয়েকটি ভাল সরঞ্জাম কী কী?


অনুমানের প্রয়োজনের কারণে আমি সরাসরি এক্সএমএল ব্যবহার করতে পারি না তবে আমি আপনার সাথে একমত। ধন্যবাদ!
বিচআরনারফ্রেড 0

@ বিচরুনারজয়: আমাকে কী লিখতে হবে? import net.sf.json.JSONObject;বা import org.json.JSONObject;। এছাড়াও আমি কোন জার অন্তর্ভুক্ত করা প্রয়োজন?
ফাহিম পার্কার

1
এখানে একটি উপায় একটি লিঙ্ক কোন নির্ভরতা ছাড়াই এটি করতে হবে, JAXP ব্যবহার করছে stackoverflow.com/questions/27222992/...
bvdb

16
আমি এসও এর বদ্ধ প্রশ্নগুলিকে খুব পছন্দ করি যার মধ্যে খুব বেশি উচ্চ দৃশ্যমানতা থাকে ... যদি এই জাতীয় দরকারী প্রশ্নটি বন্ধ করা হয় তবে কোথাও কোথাও ভুল হয়েছে।
দরিউজ

2
আমি মনে করি সবচেয়ে দরকারী প্রশ্নগুলির 90% হ'ল "ক্লোজড-অফ টপিক" .. এসএমএইচ
জেরিল কুক

উত্তর:


188

জাভাতে জেএসএনের কিছু দুর্দান্ত সংস্থান রয়েছে।

মাভেন নির্ভরতা:

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20180813</version>
</dependency>

XML.java আপনি যে শ্রেণীর সন্ধান করছেন:

import org.json.JSONObject;
import org.json.XML;

public class Main {

    public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    public static String TEST_XML_STRING =
        "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";

    public static void main(String[] args) {
        try {
            JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
            String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
            System.out.println(jsonPrettyPrintString);
        } catch (JSONException je) {
            System.out.println(je.toString());
        }
    }
}

আউটপুট হল:

{"test": {
    "attrib": "moretest",
    "content": "Turn this to JSON"
}}

14
সতর্কতা: json.org.XML প্যাকেজ অ্যান্ড্রয়েডে বিদ্যমান নেই!
লুডোভিচ ল্যান্ড্রি

2
@ ড্যানিয়েলটালস্কি: আমার কী আমদানি লিখতে হবে? import net.sf.json.JSONObject;বা import org.json.JSONObject;। এছাড়াও আমি কোন জার অন্তর্ভুক্ত করা প্রয়োজন?
ফাহিম পার্কার

2
শুধু এক্সএমএল.জভা নয় সমস্ত ফাইল ডাউনলোড করুন। এখান থেকে: github.com/douglascrockford/JSON-java/downloads
স্পিফ

4
আপনি যদি একটি আছে <test attrib="moretest" content="foo">bar</test>?
wchargin

1
দ্রষ্টব্য: org.json এর XML.toJSONObject () এক্সএমএল তালিকাগুলিকে সঠিকভাবে জসন অ্যারেতে রূপান্তর করে (জ্যাকসনের এক্সএমএলম্যাপারের বিপরীতে যা ডিফল্টরূপে নিঃশব্দে গ্রাস করে)।
অ্যাগস্টন হরভাথ

58

XML ফাইলকে JSON এ রূপান্তর করতে নিম্নলিখিত নির্ভরতা অন্তর্ভুক্ত করুন

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>

এবং আপনি মাভেন সংগ্রহশালা থেকে জারটি ডাউনলোড করতে পারেন এখানে । তারপরে প্রয়োগ করুন:

String soapmessageString = "<xml>yourStringURLorFILE</xml>";
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString);
System.out.println(soapDatainJsonObject);


2
আপনি জাভা on এ থাকলে পোস্টে উল্লিখিত জসন সংস্করণটি ব্যবহার করুন কারণ সর্বশেষ সংস্করণটি অদ্ভুত ত্রুটি ছুঁড়ে দেয়।
urug

যদি আপনার এক্সএমএল স্নিপেটের জন্য একটি বৈধ dtd ফাইল থাকে, তবে আপনি সহজেই ওপেন সোর্স এক্সিলিপ লিংক জারটি ব্যবহার করে এক্সএমএলটিকে জসন এবং জসনকে এক্সএমএলে রূপান্তর করতে পারেন। বিস্তারিত নমুনা জাভা প্রকল্পটি এখানে পাওয়া যাবে: cubicrace.com/2015/06/How-to-convers-XML-to-JSON-format.html
Piyush Chordia

আমার পুরো JSON প্যাকেজটি আমার প্রকল্পে অনুলিপি করতে হয়েছিল এবং প্যাকেজটির নতুন নামকরণ করতে হয়েছিল। গ্রেডে যুক্ত করা যায় বিল্ড করার সময় অ্যান্ড্রয়েড থেকে নকল প্যাকেজের সতর্কতা।
কোডলেনার

28

জাভাতে জেএসএন- এর একমাত্র সমস্যাটি হ'ল যদি আপনার এক্সএমএলটির একক সন্তান থাকে তবে এটি একটি অ্যারে হয় তবে এটি এটিকে অ্যারের পরিবর্তে কোনও আইটেমে রূপান্তরিত করবে। এটি যদি আপনি গতিশীলভাবে সর্বদা এক্সএমএল থেকে জেএসএনে রূপান্তরিত করেন তবে এটি সমস্যার কারণ হতে পারে, যেখানে আপনার উদাহরণে এক্সএমএলটির কেবল একটি উপাদান থাকে আপনি একটি বস্তু ফিরিয়ে দেন, তবে যদি এটিতে 2+ থাকে তবে আপনি একটি অ্যারে ফিরিয়ে দেন, যা ব্যবহার করে লোকের জন্য পার্সিং সমস্যা সৃষ্টি করতে পারে তাদেরকে JSON।

ইনফোসকুপের এক্সএমএল 2 জেএসওন ক্লাসে রূপান্তর করার আগে অ্যারেগুলিকে ট্যাগ করার একটি পদ্ধতি রয়েছে যাতে এক্সএমএলে কেবলমাত্র একটি শিশু থাকলেও অ্যারেগুলি সঠিকভাবে ম্যাপ করা যায়।

এটি ব্যবহারের উদাহরণ এখানে (কিছুটা আলাদা ভাষায়, তবে আপনি এটি দেখতেও পাবেন যে এক্সএমএল 2 জসন লিঙ্কের নোডেলিস্ট 2 জসন () পদ্ধতি থেকে অ্যারেগুলি কীভাবে ব্যবহৃত হয়)।


আমরা পাইথনে একটি "xML-to-json" লাইব্রেরি ব্যবহার করছি এবং এটি একটি অর্থগত সমস্যা mantic এই "অ্যারে বা অবজেক্ট" সমস্যাটি সমাধান করার জন্য আমরা যা করি, একটি "ট্রাইস্টনভার্টটোআর্রে ()" পদ্ধতি লিখছে, যা এতে একক বস্তুর সাথে একটি অ্যারে প্রদান করে। সুতরাং, আপনি সর্বদা আপনার মানটিকে একটি অ্যারে হিসাবে বিশ্বাস করতে পারেন
kommradHomer

এটি কীভাবে সমস্যা সমাধান করে তা আমার কাছে পরিষ্কার নয়। আপনি কি তখন কোনও বস্তুর পরিবর্তে সমস্ত কিছুকে একটি অ্যারে হিসাবে তৈরি করেন? উদাহরণস্বরূপ, যদি আমার কাছে এক্সএমএল থাকে <results><result><value>1</value></result></results>তবে এটি উত্পন্ন করবে { "results" : { "result" : { "value" : "1" } } } বা { "results" : [ { "result" : { "value" : "1" } } ] }
মারকাস

এমন কিছু আছে যা আমরা এটির অ্যারে হিসাবে প্রত্যাশা করি। সমস্যা দেখা দেয় যখন এই অ্যারেটিতে কেবলমাত্র 1 টি উপাদান থাকে, এটি এটিকে xML-to-json রূপান্তরকারী হিসাবে তৈরি করে। সুতরাং, আমরা যেমন এটি একটি একক উপাদানের জন্য একটি অ্যারে হিসাবে প্রত্যাশা করি, আমরা এটি পরীক্ষা করে এটি একটি অ্যারেতে রূপান্তর করি, আমাদের অ্যারে রয়েছে যেখানে আমরা অ্যারে প্রত্যাশা করি তা নিশ্চিত করে।
kommradHomer

তবে আপনি কীভাবে কোনও নির্দিষ্ট উপাদানের অ্যারে হওয়ার প্রত্যাশা করবেন? XML2JSON উপাদানগুলিকে ট্যাগ করে। এটি ট্যাগ না করে কীভাবে এটির অ্যারের প্রত্যাশা করা যায় তা পরিষ্কার নয়, অন্যথায় আপনি কখনই কোনও একক উপাদান 'অ্যারে' দিয়ে জানতে পারবেন না।
মার্কাস

উদাহরণস্বরূপ, "ফোনেম্বারস" নামে একটি উপাদান রয়েছে। এবং "ফোনেম্বার" উপাদানটিতে 1 বা ততোধিক "ফোনেম্বার" উপাদান রয়েছে। সুতরাং যখন "ফোনেম্বারস" এ কেবল একটি "ফোনেম্বার" উপাদান থাকে, xML2json একটি ফোনেম্বার অবজেক্ট তৈরি করে, তবে আমি একটি ফোনেম্বার অ্যারে তৈরি করি এবং এতে ফোনেম্বার অবজেক্টটি রেখেছি।
kommradHomer


2

আমি এটি দ্রুত এবং সহজ org.json.XMLউপায়টি পেয়েছি : ব্যবহৃত: জাভা-জসন.জার থেকে শ্রেণি

if (statusCode == 200 && inputStream != null) {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();

    String inputStr;
    while ((inputStr = bufferedReader.readLine()) != null) {
        responseStrBuilder.append(inputStr);
    }

    jsonObject = XML.toJSONObject(responseStrBuilder.toString());
}

1

আপনার সঠিক সমস্যাটি কী তা আমি জানি না, তবে আপনি যদি এক্সএমএল পেয়ে থাকেন এবং জেএসএন (বা কিছু) ফেরত পেতে চান তবে আপনি জ্যাক-বি-তেও দেখতে পারেন। এটি এক্সএমএল এবং / অথবা জসনকে জাভা পোজোর মার্শেলিং / আনমারশেলিংয়ের জন্য একটি মান। এমন একাধিক গ্রন্থাগার রয়েছে যা জ্যাক্স-বি প্রয়োগ করে, উদাহরণস্বরূপ অ্যাপাচি-এর সিএক্সএফ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.