-2

I want to convert from xml to json in java and get an output. But whike doing so only some parts from the xml are getting converted and not the whole xml. Any help My input xml is :

<?xml version="1.0" encoding="UTF-8"?>
<important-data certified="true" processed="true">
    <timestamp>232423423423</timestamp>
        <authors>
            <author>
                <firstName>Tim</firstName>
                <lastName>Leary</lastName>
            </author>
        </authors>
        <title>Flashbacks</title>
        <shippingWeight>1.4 pounds</shippingWeight>
        <isbn>978-0874778700</isbn>
</important-data>

And my code is: package com.discursive.answers;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;

import net.sf.json.JSON;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
import org.json.XML;

public class ConvertXMLtoJSON {
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) {
    new ConvertXMLtoJSON();
}

public ConvertXMLtoJSON() {
    try {
        InputStream is = ConvertXMLtoJSON.class.getResourceAsStream("sample-xml.xml");
        if (is != null) {
            String xml = IOUtils.toString(is);
            JSON json = XMLSerializer.readObject(xml);

            System.out.println(json.toString().split(",").length);
            for(int i= 0 ;i < json.toString().split(",").length; i ++)
                System.out.println(json.toString().split(",")[i]);
        } else {
            System.out.println("Checkpoint 1");
        }
    } catch (java.io.IOException ioe) {
        ioe.printStackTrace();
    }
}

Applying the above mentioned xml and code I get the output as:

{"timestamp":"232423423423"
"authors":"\n\t\t\n\t\t\tTim\n\t\t\tLeary\n\t\t\n\t"
"title":"Flashbacks"
"isbn":"978-0874778700"
"shippingWeight":"1.4 pounds"}

where as it should be as :

  { 
 "@certified": "true", 
 "@processed": "true", 
 "timestamp": "232423423423", 
 "authors": [  {   
 "firstName": "Tim",   
 "lastName": "Leary" 
 }], 
 "title":
 "Flashbacks", 
 "shippingWeight": "1.4 pounds", 
 "isbn": "978-0874778700"
}

What changes should I do to get the required output?

leppie
  • 115,091
  • 17
  • 196
  • 297
user2054314
  • 11
  • 1
  • 1
  • 2
  • possible duplicate of [Quickest way to convert XML to JSON in Java](http://stackoverflow.com/questions/1823264/quickest-way-to-convert-xml-to-json-in-java) – Brian Roach Jun 05 '13 at 12:08
  • I ahve already seen the stated example prior to posting this.But in the stated example the xml is in string format..i want to give it through sample-xml.xml file. – user2054314 Jun 05 '13 at 12:48
  • StackOverflow isn't here to teach you the basics of computer programming; reading a file into a String should not be an alien concept. Aside from that and ignoring that the ancient json.org code is rarely the best choice for anything these days, the point is: You need a XML library and a JSON library. Deserialize the XML then serialize it to JSON. – Brian Roach Jun 05 '13 at 12:56

1 Answers1

0

The article How to Convert XML to JSON in Java gives the same example as yours using json-lib.

The code in the example works, so it might be worth checking the versions on your libs. The json-lib website lists the required libs.

I managed to get mine working with the following libs on my build path:

  • commons-beanutils-1.8.3
  • commons-collections-3.2.1
  • commons-io-1.2
  • commons-lang-2.4
  • commons-logging-1.1.3
  • ezmorph-1.0.6
  • json-lib2.4-jdk15
  • xom-1.2.10
osborp
  • 362
  • 1
  • 3
  • 9