XML को JSON में जावा में परिवर्तित करने का सबसे तेज़ तरीका [बंद]


171

XML में जावा को JSON में जल्दी और आसानी से परिवर्तित करने के लिए कुछ अच्छे उपकरण क्या हैं?


मैं कल्पना में आवश्यकता के कारण सीधे XML का उपयोग नहीं कर सकता, लेकिन मैं आपसे सहमत हूं। धन्यवाद!
BeachRunnerFred

@BeachRunnerJoe: मुझे क्या आयात लिखना होगा? import net.sf.json.JSONObject;या import org.json.JSONObject;। इसके अलावा मुझे किस जार को शामिल करने की आवश्यकता है?
फहीम पारकर

1
यहाँ JAXP का उपयोग करके बिना किसी निर्भरता के इसे करने का एक तरीका दिया गया है: stackoverflow.com/questions/27222992/…
bvdb

16
मुझे SO के बंद प्रश्न बहुत पसंद हैं जिनकी दृश्यता बहुत अधिक है ... यदि ऐसा कोई उपयोगी प्रश्न बंद हो जाता है तो कुछ गलत हो गया है।
दारिउज़

2
मुझे लगता है कि सबसे उपयोगी प्रश्नों में से 90% "बंद-बंद विषय" हैं .. smh
Jeryl Cook

जवाबों:


188

जावा में JSON के पास कुछ बेहतरीन संसाधन हैं।

मावेन निर्भरता:

<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 पैकेज Android में मौजूद नहीं है!
लुडोविक लैंड्री

2
@danieltalsky: मुझे लिखने के लिए क्या आयात चाहिए? import net.sf.json.JSONObject;या import org.json.JSONObject;। इसके अलावा मुझे किस जार को शामिल करने की आवश्यकता है?
फहीम पारकर

2
डाउनलोड न केवल XML.java सभी फाइलें। यहाँ से: github.com/douglascrockford/JSON-java/downloads
आकर्षक बनाएं

4
यदि आप एक हों तो <test attrib="moretest" content="foo">bar</test>?
विर्गिन

1
नोट: org.json की XML.toJSONObject () भी सही ढंग से xml सूचियों को json सरणियों में परिवर्तित करती है (जैकसन के XmlMapper के विपरीत जो डिफ़ॉल्ट रूप से चुपचाप निगल जाती है)।
अगस्टोन होर्वाथ

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
अगर आप java 7 में नवीनतम संस्करण के रूप में अजीब त्रुटियों को फेंकते हैं तो पोस्ट में बताए गए json के संस्करण का उपयोग करें।
आग्रह करें

यदि आपके पास xml स्निपेट के लिए एक मान्य dtd फ़ाइल है, तो आप आसानी से ओपन सोर्स एक्लिप्स लिंक जार का उपयोग करके xml को json और json को xml में बदल सकते हैं। विस्तृत नमूना जेएवीए
पीयूष

मुझे पूरे JSON पैकेज को अपनी परियोजना में कॉपी करना पड़ा और पैकेज का नाम बदला। ढाल में जोड़ने से निर्माण के दौरान एंड्रॉइड से डुप्लिकेट पैकेज की चेतावनी मिलती है।
कोडेलियरर

28

जावा में JSON के साथ एकमात्र समस्या यह है कि यदि आपके XML में एक ही बच्चा है, लेकिन यह एक सरणी है, तो यह इसे एक सरणी के बजाय एक ऑब्जेक्ट में बदल देगा। यह समस्याएँ पैदा कर सकता है यदि आप डायनामिक रूप से हमेशा XML से JSON में परिवर्तित होते हैं, जहाँ यदि आपके उदाहरण में XML में केवल एक ही तत्व है, तो आप एक ऑब्जेक्ट लौटाते हैं, लेकिन यदि इसमें 2+ है, तो आप एक सरणी लौटाते हैं, जो लोगों के लिए पार्सिंग समस्याओं का कारण बन सकता है JSON।

Infoscoop के XML2JSON वर्ग में तत्वों को टैग करने का एक तरीका है, जो रूपांतरण करने से पहले सरणियाँ हैं, ताकि सरणियों को ठीक से मैप किया जा सके, भले ही XML में एक ही बच्चा हो।

यहां इसका उपयोग करने का एक उदाहरण है (थोड़ी अलग भाषा में, लेकिन आप यह भी देख सकते हैं कि कैसे सरणियों का उपयोग nodelist2json () XML2JSON लिंक की विधि से किया गया है)।


हम अजगर में "xml-to-json" लाइब्रेरी का उपयोग कर रहे हैं और यह एक शब्दार्थ समस्या है। हम इस "सरणी या ऑब्जेक्ट" समस्या को हल करने के लिए क्या करते हैं, एक "tryConvertToArray ()" विधि लिख रहा है, जो इसमें एकल ऑब्जेक्ट के साथ एक सरणी देता है। तो, आप हमेशा एक सरणी होने के लिए अपने मूल्य पर भरोसा कर सकते हैं
kommradHomer

यह मेरे लिए स्पष्ट नहीं है कि समस्या को कैसे हल करता है। क्या आप बस एक वस्तु के बजाय सब कुछ एक सरणी बनाते हैं? उदाहरण के लिए, अगर मेरे पास XML है <results><result><value>1</value></result></results>, तो क्या यह उत्पन्न होगा { "results" : { "result" : { "value" : "1" } } } या { "results" : [ { "result" : { "value" : "1" } } ] }
मार्कस

ऐसा कुछ है जिसकी हम उम्मीद करते हैं कि यह एक सरणी होगी। समस्या तब उत्पन्न होती है जब इस सरणी में केवल 1 तत्व होता है, जो इसे xml-to-json कनवर्टर के लिए एक वस्तु बनाता है। इसलिए, जैसा कि हम यह उम्मीद करते हैं कि यह एक एकल तत्व के लिए भी एक सरणी है, हम इसे एक सरणी में जाँचते हैं और परिवर्तित करते हैं, यह सुनिश्चित करते हुए कि हमारे पास एक ऐसा सरणी है जहां हम एक सरणी की अपेक्षा करते हैं।
कोमराधोमर

लेकिन आप एक विशिष्ट तत्व के लिए एक सरणी होने की उम्मीद कैसे करते हैं? XML2JSON तत्वों को टैग करता है। यह स्पष्ट नहीं है कि इसे टैग किए बिना एक सरणी होने की उम्मीद कैसे की जाए, अन्यथा आप एक भी तत्व 'सरणी' के साथ कभी नहीं जान पाएंगे।
मार्कस

उदाहरण के लिए, एक तत्व है, जिसे "फोनोन्स" कहा जाता है। और "फोनोन्स" तत्व में 1 या अधिक "फोननंबर" तत्व होते हैं। इसलिए जब "फोननंबर" में केवल एक "फोननंबर" तत्व होता है, तो xml2json एक फोननंबर ऑब्जेक्ट बनाता है, लेकिन मैं एक फोननंबर ऐरे बनाता हूं और इसमें फोननंबर ऑब्जेक्ट डालता हूं।
कोमराधोमर


2

मुझे यह त्वरित और आसान तरीका मिला: इस्तेमाल किया: org.json.XMLjava-json.jar से वर्ग

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

मुझे नहीं पता कि आपकी सटीक समस्या क्या है, लेकिन यदि आप XML प्राप्त कर रहे हैं और JSON (या कुछ) वापस करना चाहते हैं तो आप JAX-B को भी देख सकते हैं। यह जावा POJO के XML और / या Json के लिए मार्शलिंग / अनमर्शलिंग के लिए एक मानक है। ऐसे कई पुस्तकालय हैं जो JAX-B को लागू करते हैं, उदाहरण के लिए Apache's CXF।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.