Skip to content

Instantly share code, notes, and snippets.

@Szandor72
Created August 30, 2018 19:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Szandor72/68631111b67c97ea11450ef6b9c2091d to your computer and use it in GitHub Desktop.
Save Szandor72/68631111b67c97ea11450ef6b9c2091d to your computer and use it in GitHub Desktop.
String xml2json(String xml) {
XmlStreamReader reader = new XmlStreamReader(xml);
reader.setCoalescing(true);
//skip START_DOCUMENT
reader.nextTag();
JsonGenerator g = Json.createGenerator(true);
g.writeStartObject();
while (reader.hasNext()) {
if (reader.isStartElement()) {
//found open tag
String name = reader.getLocalName();
reader.next();
if (reader.isWhitespace()) {
//skip whitespace
reader.next();
}
if (reader.isEndElement()) {
//found immediately closing tag
g.writeNullField(name);
} else if (!reader.isCharacters()) {
//found object
if (name.endsWith('Set') || name.endsWith('Mapping')) {
g.writeFieldName(name);
g.writeStartArray();
} else if (name == 'item') {
g.writeStartObject();
} else {
g.writeFieldName(name);
g.writeStartObject();
}
continue;
} else {
//found text
String text = reader.getText();
if (text == 'true' || text == 'false') {
//found boolean field
g.writeBooleanField(name, text == 'true');
} else {
//all others strings
g.writeStringField(name, reader.getText());
}
reader.nextTag(); //skip close
}
} else if (reader.isCharacters()) {
//found text
g.writeObject(reader.getText());
reader.nextTag(); //skip close
} else if (reader.isEndElement()) {
//found end tag
String name = reader.getLocalName();
if (name.endsWith('Response')) {
//nothing to do
} else if (name.endsWith('Set') || name.endsWith('Mapping')) {
g.writeEndArray();
} else if (name == 'item') {
g.writeEndObject();
} else {
g.writeEndObject();
}
reader.next();
}
reader.next();
}
return g.getAsString();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment