Reading JSON - beckchr/staxon GitHub Wiki

Creating a JSON XMLStreamReader

The easiest way to create a reader instance is to use the various JsonXMLInputFactory.createXMLStreamReader(...) methods, e.g.

XMLInputFactory factory = new JsonXMLInputFactory();
XMLStreamReader reader = factory.createJsonXMLStreamReader(stream);

The stream parameter can be a java.io.InputStream or java.io.Reader.

The input factory will use an instance of JsonStreamFactory to create underlying JSON stream sources (default is to use StAXON's own implementation). You may also explicitly pass an instance to the input factory, e.g.:

XMLInputFactory factory = new JsonXMLInputFactory(new JacksonStreamFactory(...));
XMLStreamReader reader = factory.createJsonXMLStreamReader(stream);

Please refer to Factory Configuration for a description of available input properties.

Reading Documents

If you know StAX, you'll notice that there's nothing special here: just use the XMLStreamReader obtained from StAXON as usual. In fact, if you already have some code which reads XML and want to switch to JSON, just replacing the writer reader do the trick.

JsonXMLStreamReader reader = factory.createXMLStreamReader(new StringReader("{\"alice\":\"charlie\"}"));
assert reader.getEventType() == XMLStreamConstants.START_DOCUMENT;
reader.nextTag(); 
assert reader.isStartElement() && "alice".equals(reader.getLocalName());
reader.next();
assert reader.hasText() && "charlie".equals(reader.getText());
reader.nextTag();
assert reader.isEndElement();
reader.next();
assert reader.getEventType() == XMLStreamConstants.END_DOCUMENT;
reader.close();

To better understand StAXON's Mapping Convention, you may also want to refer to the Writing JSON examples.