Class AsyncJSON


  • public class AsyncJSON
    extends java.lang.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).

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static interface  AsyncJSON.Context
      The state of JSON parsing.
      static class  AsyncJSON.Factory
      The factory that creates AsyncJSON instances.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      <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.
      protected java.util.List<java.lang.Object> newArray​(AsyncJSON.Context context)
      When a JSON [ is encountered during parsing, this method is called to create a new List instance.
      protected java.lang.RuntimeException newInvalidJSON​(java.nio.ByteBuffer buffer, java.lang.String message)  
      protected java.util.Map<java.lang.String,​java.lang.Object> newObject​(AsyncJSON.Context context)
      When a JSON { is encountered during parsing, this method is called to create a new Map 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​(java.nio.ByteBuffer buffer)
      Feeds the parser with the given buffer chunk.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • 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:
        java.lang.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:
        java.lang.IllegalArgumentException - if the JSON is malformed
      • parse

        public boolean parse​(java.nio.ByteBuffer buffer)

        Feeds the parser with the given buffer chunk.

        Parameters:
        buffer - the buffer to parse
        Returns:
        whether the JSON parsing was complete
        Throws:
        java.lang.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:
        java.lang.IllegalArgumentException - if the JSON is malformed
        java.lang.IllegalStateException - if the no JSON was passed to the parse() methods
      • newObject

        protected java.util.Map<java.lang.String,​java.lang.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 java.util.List<java.lang.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 java.lang.RuntimeException newInvalidJSON​(java.nio.ByteBuffer buffer,
                                                            java.lang.String message)