Created
August 30, 2018 19:52
-
-
Save Szandor72/68631111b67c97ea11450ef6b9c2091d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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