Class AsyncJSON

java.lang.Object
org.eclipse.jetty.util.ajax.AsyncJSON

public class AsyncJSON extends Object

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).

  • Constructor Details

  • 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 parse
      offset - the offset to start parsing from
      length - the number of bytes to parse
      Returns:
      whether the JSON parsing was complete
      Throws:
      IllegalArgumentException - if the JSON is malformed
    • parse

      public boolean parse(ByteBuffer buffer)

      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 malformed
      IllegalStateException - if the no JSON was passed to the parse() methods
    • newObject

      protected Map<String,Object> newObject(AsyncJSON.Context context)

      When a JSON { is encountered during parsing, this method is called to create a new Map instance.

      Subclasses may override to return a custom Map instance.

      Parameters:
      context - the parsing context
      Returns:
      a Map instance
    • newArray

      protected List<Object> newArray(AsyncJSON.Context context)

      When a JSON [ is encountered during parsing, this method is called to create a new List instance.

      Subclasses may override to return a custom List instance.

      Parameters:
      context - the parsing context
      Returns:
      a List instance
    • newInvalidJSON

      protected RuntimeException newInvalidJSON(ByteBuffer buffer, String message)