मैं XML को JSON में बदलने के लिए JSONObject के toJSONObject() का उपयोग करता हूं। हालाँकि, मेरे लिए एक कष्टप्रद परिवर्तित समस्या है।

उदाहरण के लिए, मेरा मूल एक्सएमएल इस तरह दिखता है:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>

तो मैं उन्हें JSON में बदलने के लिए निम्न कार्य करता हूं:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>";
    try {
        JSONObject xmlObj = XML.toJSONObject(xml);
        System.out.println(xmlObj.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

रूपांतरण के बाद, प्रत्येक टैग के अंदर मेरा डेटा दूषित हो जाता है, क्योंकि उसे लगता है कि वे NUMBERS हैं, न कि STRING

{"testData":{"Timestamp":20170907005718936,"Detail":{"Item1":2907005718520,"Item2":2907425118520,"Item3":20170921133613}}}

मैं सभी टैग मानों को केवल स्ट्रिंग प्रकार में कैसे परिवर्तित कर सकता हूं?

2
user6309529 21 सितंबर 2017, 12:40

3 जवाब

सबसे बढ़िया उत्तर

आप प्रत्येक number को String में बदलने का प्रयास कर सकते हैं, कुछ ऐसा:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>";
xml = xml.replaceAll("(?<=\\d+)<", "\"<"); // any < preceded by digits
xml = xml.replaceAll(">(?=\\d+)", ">\""); // any > followed by digits
System.out.println(xml);

आउटपुट:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><testData><Timestamp>"20170907005718936"</Timestamp><Detail><Item1>"02907005718520"</Item1><Item2>"02907425118520"</Item2><Item3>"20170921133613"</Item3></Detail></testData>

संपादित करें:

यदि आपके पास String मान हो सकते हैं जो एक अंक (अंकों) के साथ शुरू/समाप्त हो सकते हैं, तो आप निम्न सीमा निर्दिष्ट कर सकते हैं कि आपके मान को कितने अंकों को Number माना जाना चाहिए, उदाहरण के लिए:

xml = xml.replaceAll("(?<=\\d{5})<", "\"<"); // any < preceded by at least 5 digits
xml = xml.replaceAll(">(?=\\d{5})", ">\""); // any > followed by at least 5 digits
0
Yahya 22 सितंबर 2017, 11:45

ये कोशिश करें,

JSONObject xmlObj = XML.toJSONObject(xml,सत्य);

फ़ंक्शन में इनपुट एक्सएमएल के बाद बूलियन वापस आ जाएगा जैसा आपने परिणाम की उम्मीद की थी।

धन्यवाद, मोराजसे

2
mohan raj 13 अप्रैल 2018, 03:36

मुझे लगता है कि इसका उपयोग किया जा सकता है: कक्षा:

public JSONObject() {
    this.map = new LinkedHashMap<String, Object>();
}
 
 
public JSONObject(Map<String, Object> map) {
    this.map = new LinkedHashMap<String, Object>();
    if (map != null) {
        Iterator<Entry<String, Object>> i = map.entrySet().iterator();
        while (i.hasNext()) {
            Entry<String, Object> entry = i.next();
            Object value = entry.getValue();
            if (value != null) {
                this.map.put(entry.getKey(), wrap(value));
            }
        }
    }
}

फिर अपने मुख्य पर:

String xml = FileUtils.readFileToString(new File("test.xml"));
System.out.println(org.json.XML.toJSONObject(xml).toString());

आशा है कि यह आपकी मदद करता है! =)

0
F0XS 21 सितंबर 2017, 12:47