Class AsyncJSON
A non-blocking JSON parser that can parse partial JSON strings.
Usage:
AsyncJSON parser = new AsyncJSON.Factory().newAsyncJSON(); // Feed the parser with partial JSON string content. parser.parse(chunk1); parser.parse(chunk2); // Tell the parser that the JSON string content // is terminated and get the JSON object back. Map<String, Object> object = parser.complete();
After the call to complete()
the parser can be reused to parse
another JSON string.
Custom objects can be created by specifying a "class"
or
"x-class"
field:
String json = """ { "x-class": "com.acme.Person", "firstName": "John", "lastName": "Doe", "age": 42 } """ parser.parse(json); com.acme.Person person = parser.complete();
Class com.acme.Person
must either implement JSON.Convertible
,
or be mapped with a JSON.Convertor
via AsyncJSON.Factory.putConvertor(String, Convertor)
.
JSON arrays are by default represented with a List<Object>
, but the
Java representation can be customized via AsyncJSON.Factory.setArrayConverter(Function)
.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
The state of JSON parsing.static class
The factory that creates AsyncJSON instances. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription<R> R
complete()
Signals to the parser that the parse data is complete, and returns the object parsed from the JSON chunks passed to theparse()
methods.newArray
(AsyncJSON.Context context) When a JSON[
is encountered during parsing, this method is called to create a newList
instance.protected RuntimeException
newInvalidJSON
(ByteBuffer buffer, String message) newObject
(AsyncJSON.Context context) When a JSON{
is encountered during parsing, this method is called to create a newMap
instance.boolean
parse
(byte[] bytes) Feeds the parser with the given bytes chunk.boolean
parse
(byte[] bytes, int offset, int length) Feeds the parser with the given bytes chunk.boolean
parse
(ByteBuffer buffer) Feeds the parser with the given buffer chunk.
-
Constructor Details
-
AsyncJSON
-
-
Method Details
-
parse
public boolean parse(byte[] bytes) Feeds the parser with the given bytes chunk.
- Parameters:
bytes
- the bytes to parse- Returns:
- whether the JSON parsing was complete
- Throws:
IllegalArgumentException
- if the JSON is malformed
-
parse
public boolean parse(byte[] bytes, int offset, int length) Feeds the parser with the given bytes chunk.
- Parameters:
bytes
- the bytes to parseoffset
- the offset to start parsing fromlength
- the number of bytes to parse- Returns:
- whether the JSON parsing was complete
- Throws:
IllegalArgumentException
- if the JSON is malformed
-
parse
Feeds the parser with the given buffer chunk.
- Parameters:
buffer
- the buffer to parse- Returns:
- whether the JSON parsing was complete
- Throws:
IllegalArgumentException
- if the JSON is malformed
-
complete
public <R> R complete()Signals to the parser that the parse data is complete, and returns the object parsed from the JSON chunks passed to the
parse()
methods.- Type Parameters:
R
- the type the result is cast to- Returns:
- the result of the JSON parsing
- Throws:
IllegalArgumentException
- if the JSON is malformedIllegalStateException
- if the no JSON was passed to theparse()
methods
-
newObject
When a JSON
{
is encountered during parsing, this method is called to create a newMap
instance.Subclasses may override to return a custom
Map
instance.- Parameters:
context
- the parsing context- Returns:
- a
Map
instance
-
newArray
When a JSON
[
is encountered during parsing, this method is called to create a newList
instance.Subclasses may override to return a custom
List
instance.- Parameters:
context
- the parsing context- Returns:
- a
List
instance
-
newInvalidJSON
-