Class JsonParser

java.lang.Object
com.google.api.client.json.JsonParser
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
GsonParser, JacksonParser, MockJsonParser

public abstract class JsonParser extends Object implements Closeable
Abstract low-level JSON parser. See https://developers.google.com/api-client-library/java/google-http-java-client/json

Implementation has no fields and therefore thread-safe, but sub-classes are not necessarily thread-safe.

If a JSON map is encountered while using a destination class of type Map, then an

invalid reference
java.util.ArrayMap
is used by default for the parsed values.
Since:
1.3
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static WeakHashMap<Class<?>,Field>
    Maps a polymorphic Class to its Field with the JsonPolymorphicTypeMap annotation, or null if there is no field with that annotation.
    private static final Lock
    Lock on the cachedTypemapFields.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    Closes the parser and the underlying input stream or reader, and releases any memory associated with it.
    abstract BigInteger
    Returns the BigInteger value of the current token.
    abstract byte
    Returns the byte value of the current token.
    private static Field
    Finds the Field on the given Class that has the JsonPolymorphicTypeMap annotation, or null if there is none.
    abstract String
    Returns the most recent field name or null for array values or for root-level values.
    abstract JsonToken
    Returns the token the parser currently points to or null for none (at start of input or after end of input).
    abstract BigDecimal
    Returns the BigDecimal value of the current token.
    abstract double
    Returns the double value of the current token.
    abstract JsonFactory
    Returns the JSON factory from which this generator was created.
    abstract float
    Returns the float value of the current token.
    abstract int
    Returns the int value of the current token.
    abstract long
    Returns the long value of the current token.
    abstract short
    Returns the short value of the current token.
    abstract String
    Returns a textual representation of the current token or null if getCurrentToken() is null.
    abstract JsonToken
    Returns the next token from the stream or null to indicate end of input.
    final <T> T
    parse(Class<T> destinationClass)
    Parse a JSON object, array, or value into a new instance of the given destination class.
    final <T> T
    parse(Class<T> destinationClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON object, array, or value into a new instance of the given destination class, optionally using the given parser customizer.
    final void
    parse(Object destination)
    Parse a JSON object from the given JSON parser into the given destination object.
    final void
    parse(Object destination, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON object from the given JSON parser into the given destination object, optionally using the given parser customizer.
    parse(Type dataType, boolean close)
    Parse a JSON object, array, or value into a new instance of the given destination class.
    parse(Type dataType, boolean close, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON object, array, or value into a new instance of the given destination class, optionally using the given parser customizer.
    private void
    parse(ArrayList<Type> context, Object destination, CustomizeJsonParser customizeParser)
    Parses the next field from the given JSON parser into the given destination object.
    final <T> T
    parseAndClose(Class<T> destinationClass)
    Parse a JSON object, array, or value into a new instance of the given destination class, and then closes the parser.
    final <T> T
    parseAndClose(Class<T> destinationClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON object, array, or value into a new instance of the given destination class using parse(Class, CustomizeJsonParser), and then closes the parser.
    final void
    parseAndClose(Object destination)
    Parse a JSON Object from the given JSON parser -- which is closed after parsing completes -- into the given destination object.
    final void
    parseAndClose(Object destination, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON Object from the given JSON parser -- which is closed after parsing completes -- into the given destination object, optionally using the given parser customizer.
    final <T> Collection<T>
    parseArray(Class<?> destinationCollectionClass, Class<T> destinationItemClass)
    Parse a JSON Array from the given JSON parser into the given destination collection.
    final <T> Collection<T>
    parseArray(Class<?> destinationCollectionClass, Class<T> destinationItemClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
    private <T> void
    parseArray(Field fieldContext, Collection<T> destinationCollection, Type destinationItemType, ArrayList<Type> context, CustomizeJsonParser customizeParser)
    Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
    final <T> void
    parseArray(Collection<? super T> destinationCollection, Class<T> destinationItemClass)
    Parse a JSON Array from the given JSON parser into the given destination collection.
    final <T> void
    parseArray(Collection<? super T> destinationCollection, Class<T> destinationItemClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
    final <T> Collection<T>
    parseArrayAndClose(Class<?> destinationCollectionClass, Class<T> destinationItemClass)
    Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection.
    final <T> Collection<T>
    parseArrayAndClose(Class<?> destinationCollectionClass, Class<T> destinationItemClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection, optionally using the given parser customizer.
    final <T> void
    parseArrayAndClose(Collection<? super T> destinationCollection, Class<T> destinationItemClass)
    Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection.
    final <T> void
    parseArrayAndClose(Collection<? super T> destinationCollection, Class<T> destinationItemClass, CustomizeJsonParser customizeParser)
    Beta
    Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection, optionally using the given parser customizer.
    private void
    parseMap(Field fieldContext, Map<String,Object> destinationMap, Type valueType, ArrayList<Type> context, CustomizeJsonParser customizeParser)
    Parse a JSON Object from the given JSON parser into the given destination map, optionally using the given parser customizer.
    private final Object
    parseValue(Field fieldContext, Type valueType, ArrayList<Type> context, Object destination, CustomizeJsonParser customizeParser, boolean handlePolymorphic)
    Parse a value.
    abstract JsonParser
    Skips to the matching JsonToken.END_ARRAY if current token is JsonToken.START_ARRAY, the matching JsonToken.END_OBJECT if the current token is JsonToken.START_OBJECT, else does nothing.
    final void
    skipToKey(String keyToFind)
    Skips the values of all keys in the current object until it finds the given key.
    final String
    skipToKey(Set<String> keysToFind)
    Skips the values of all keys in the current object until it finds one of the given keys.
    private JsonToken
    Starts parsing that handles start of input by calling nextToken().
    private JsonToken
    Starts parsing an object or array by making sure the parser points to an object field name, first array value or end of object or array.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • cachedTypemapFields

      private static WeakHashMap<Class<?>,Field> cachedTypemapFields
      Maps a polymorphic Class to its Field with the JsonPolymorphicTypeMap annotation, or null if there is no field with that annotation.
    • lock

      private static final Lock lock
      Lock on the cachedTypemapFields.
  • Constructor Details

    • JsonParser

      public JsonParser()
  • Method Details

    • getFactory

      public abstract JsonFactory getFactory()
      Returns the JSON factory from which this generator was created.
    • close

      public abstract void close() throws IOException
      Closes the parser and the underlying input stream or reader, and releases any memory associated with it.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • nextToken

      public abstract JsonToken nextToken() throws IOException
      Returns the next token from the stream or null to indicate end of input.
      Throws:
      IOException
    • getCurrentToken

      public abstract JsonToken getCurrentToken()
      Returns the token the parser currently points to or null for none (at start of input or after end of input).
    • getCurrentName

      public abstract String getCurrentName() throws IOException
      Returns the most recent field name or null for array values or for root-level values.
      Throws:
      IOException
    • skipChildren

      public abstract JsonParser skipChildren() throws IOException
      Skips to the matching JsonToken.END_ARRAY if current token is JsonToken.START_ARRAY, the matching JsonToken.END_OBJECT if the current token is JsonToken.START_OBJECT, else does nothing.
      Throws:
      IOException
    • getText

      public abstract String getText() throws IOException
      Returns a textual representation of the current token or null if getCurrentToken() is null.
      Throws:
      IOException
    • getByteValue

      public abstract byte getByteValue() throws IOException
      Returns the byte value of the current token.
      Throws:
      IOException
    • getShortValue

      public abstract short getShortValue() throws IOException
      Returns the short value of the current token.
      Throws:
      IOException
    • getIntValue

      public abstract int getIntValue() throws IOException
      Returns the int value of the current token.
      Throws:
      IOException
    • getFloatValue

      public abstract float getFloatValue() throws IOException
      Returns the float value of the current token.
      Throws:
      IOException
    • getLongValue

      public abstract long getLongValue() throws IOException
      Returns the long value of the current token.
      Throws:
      IOException
    • getDoubleValue

      public abstract double getDoubleValue() throws IOException
      Returns the double value of the current token.
      Throws:
      IOException
    • getBigIntegerValue

      public abstract BigInteger getBigIntegerValue() throws IOException
      Returns the BigInteger value of the current token.
      Throws:
      IOException
    • getDecimalValue

      public abstract BigDecimal getDecimalValue() throws IOException
      Returns the BigDecimal value of the current token.
      Throws:
      IOException
    • parseAndClose

      public final <T> T parseAndClose(Class<T> destinationClass) throws IOException
      Parse a JSON object, array, or value into a new instance of the given destination class, and then closes the parser.
      Type Parameters:
      T - destination class
      Parameters:
      destinationClass - destination class that has a public default constructor to use to create a new instance
      Returns:
      new instance of the parsed destination class
      Throws:
      IOException
      Since:
      1.15
    • parseAndClose

      @Beta public final <T> T parseAndClose(Class<T> destinationClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON object, array, or value into a new instance of the given destination class using parse(Class, CustomizeJsonParser), and then closes the parser.
      Type Parameters:
      T - destination class
      Parameters:
      destinationClass - destination class that has a public default constructor to use to create a new instance
      customizeParser - optional parser customizer or null for none
      Returns:
      new instance of the parsed destination class
      Throws:
      IOException
    • skipToKey

      public final void skipToKey(String keyToFind) throws IOException
      Skips the values of all keys in the current object until it finds the given key.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name. After this method ends, the current token will either be the JsonToken.END_OBJECT of the current object if the key is not found, or the value of the key that was found.

      Parameters:
      keyToFind - key to find
      Throws:
      IOException
    • skipToKey

      public final String skipToKey(Set<String> keysToFind) throws IOException
      Skips the values of all keys in the current object until it finds one of the given keys.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name. After this method ends, the current token will either be the JsonToken.END_OBJECT of the current object if no matching key is found, or the value of the key that was found.

      Parameters:
      keysToFind - set of keys to look for
      Returns:
      name of the first matching key found or null if no match was found
      Throws:
      IOException
      Since:
      1.10
    • startParsing

      private JsonToken startParsing() throws IOException
      Starts parsing that handles start of input by calling nextToken().
      Throws:
      IOException
    • startParsingObjectOrArray

      private JsonToken startParsingObjectOrArray() throws IOException
      Starts parsing an object or array by making sure the parser points to an object field name, first array value or end of object or array.

      If the parser is at the start of input, nextToken() is called. The current token must then be JsonToken.START_OBJECT, JsonToken.END_OBJECT, JsonToken.START_ARRAY, JsonToken.END_ARRAY, or JsonToken.FIELD_NAME. For an object only, after the method is called, the current token must be either JsonToken.FIELD_NAME or JsonToken.END_OBJECT.

      Throws:
      IOException
    • parseAndClose

      public final void parseAndClose(Object destination) throws IOException
      Parse a JSON Object from the given JSON parser -- which is closed after parsing completes -- into the given destination object.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name.

      Parameters:
      destination - destination object
      Throws:
      IOException
      Since:
      1.15
    • parseAndClose

      @Beta public final void parseAndClose(Object destination, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON Object from the given JSON parser -- which is closed after parsing completes -- into the given destination object, optionally using the given parser customizer.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name.

      Parameters:
      destination - destination object
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parse

      public final <T> T parse(Class<T> destinationClass) throws IOException
      Parse a JSON object, array, or value into a new instance of the given destination class.

      If it parses an object, after this method ends, the current token will be the object's ending JsonToken.END_OBJECT. If it parses an array, after this method ends, the current token will be the array's ending JsonToken.END_ARRAY.

      Type Parameters:
      T - destination class
      Parameters:
      destinationClass - destination class that has a public default constructor to use to create a new instance
      Returns:
      new instance of the parsed destination class
      Throws:
      IOException
      Since:
      1.15
    • parse

      @Beta public final <T> T parse(Class<T> destinationClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON object, array, or value into a new instance of the given destination class, optionally using the given parser customizer.

      If it parses an object, after this method ends, the current token will be the object's ending JsonToken.END_OBJECT. If it parses an array, after this method ends, the current token will be the array's ending JsonToken.END_ARRAY.

      Type Parameters:
      T - destination class
      Parameters:
      destinationClass - destination class that has a public default constructor to use to create a new instance
      customizeParser - optional parser customizer or null for none
      Returns:
      new instance of the parsed destination class
      Throws:
      IOException
    • parse

      public Object parse(Type dataType, boolean close) throws IOException
      Parse a JSON object, array, or value into a new instance of the given destination class.

      If it parses an object, after this method ends, the current token will be the object's ending JsonToken.END_OBJECT. If it parses an array, after this method ends, the current token will be the array's ending JsonToken.END_ARRAY.

      Parameters:
      dataType - Type into which the JSON should be parsed
      close - true if close() should be called after parsing
      Returns:
      new instance of the parsed dataType
      Throws:
      IOException
      Since:
      1.15
    • parse

      @Beta public Object parse(Type dataType, boolean close, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON object, array, or value into a new instance of the given destination class, optionally using the given parser customizer.

      If it parses an object, after this method ends, the current token will be the object's ending JsonToken.END_OBJECT. If it parses an array, after this method ends, the current token will be the array's ending JsonToken.END_ARRAY.

      Parameters:
      dataType - Type into which the JSON should be parsed
      close - true if close() should be called after parsing
      customizeParser - optional parser customizer or null for none
      Returns:
      new instance of the parsed dataType
      Throws:
      IOException
      Since:
      1.10
    • parse

      public final void parse(Object destination) throws IOException
      Parse a JSON object from the given JSON parser into the given destination object.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name. After this method ends, the current token will be the JsonToken.END_OBJECT of the current object.

      Parameters:
      destination - destination object
      Throws:
      IOException
      Since:
      1.15
    • parse

      @Beta public final void parse(Object destination, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON object from the given JSON parser into the given destination object, optionally using the given parser customizer.

      Before this method is called, the parser must either point to the start or end of a JSON object or to a field name. After this method ends, the current token will be the JsonToken.END_OBJECT of the current object.

      Parameters:
      destination - destination object
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parse

      private void parse(ArrayList<Type> context, Object destination, CustomizeJsonParser customizeParser) throws IOException
      Parses the next field from the given JSON parser into the given destination object.
      Parameters:
      context - destination context stack (possibly empty)
      destination - destination object instance or null for none (for example empty context stack)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseArrayAndClose

      public final <T> Collection<T> parseArrayAndClose(Class<?> destinationCollectionClass, Class<T> destinationItemClass) throws IOException
      Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection.
      Parameters:
      destinationCollectionClass - class of destination collection (must have a public default constructor)
      destinationItemClass - class of destination collection item (must have a public default constructor)
      Throws:
      IOException
      Since:
      1.15
    • parseArrayAndClose

      @Beta public final <T> Collection<T> parseArrayAndClose(Class<?> destinationCollectionClass, Class<T> destinationItemClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection, optionally using the given parser customizer.
      Parameters:
      destinationCollectionClass - class of destination collection (must have a public default constructor)
      destinationItemClass - class of destination collection item (must have a public default constructor)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseArrayAndClose

      public final <T> void parseArrayAndClose(Collection<? super T> destinationCollection, Class<T> destinationItemClass) throws IOException
      Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection.
      Parameters:
      destinationCollection - destination collection
      destinationItemClass - class of destination collection item (must have a public default constructor)
      Throws:
      IOException
      Since:
      1.15
    • parseArrayAndClose

      @Beta public final <T> void parseArrayAndClose(Collection<? super T> destinationCollection, Class<T> destinationItemClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON Array from the given JSON parser (which is closed after parsing completes) into the given destination collection, optionally using the given parser customizer.
      Parameters:
      destinationCollection - destination collection
      destinationItemClass - class of destination collection item (must have a public default constructor)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseArray

      public final <T> Collection<T> parseArray(Class<?> destinationCollectionClass, Class<T> destinationItemClass) throws IOException
      Parse a JSON Array from the given JSON parser into the given destination collection.
      Parameters:
      destinationCollectionClass - class of destination collection (must have a public default constructor)
      destinationItemClass - class of destination collection item (must have a public default constructor)
      Throws:
      IOException
      Since:
      1.15
    • parseArray

      @Beta public final <T> Collection<T> parseArray(Class<?> destinationCollectionClass, Class<T> destinationItemClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
      Parameters:
      destinationCollectionClass - class of destination collection (must have a public default constructor)
      destinationItemClass - class of destination collection item (must have a public default constructor)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseArray

      public final <T> void parseArray(Collection<? super T> destinationCollection, Class<T> destinationItemClass) throws IOException
      Parse a JSON Array from the given JSON parser into the given destination collection.
      Parameters:
      destinationCollection - destination collection
      destinationItemClass - class of destination collection item (must have a public default constructor)
      Throws:
      IOException
      Since:
      1.15
    • parseArray

      @Beta public final <T> void parseArray(Collection<? super T> destinationCollection, Class<T> destinationItemClass, CustomizeJsonParser customizeParser) throws IOException
      Beta
      Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
      Parameters:
      destinationCollection - destination collection
      destinationItemClass - class of destination collection item (must have a public default constructor)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseArray

      private <T> void parseArray(Field fieldContext, Collection<T> destinationCollection, Type destinationItemType, ArrayList<Type> context, CustomizeJsonParser customizeParser) throws IOException
      Parse a JSON Array from the given JSON parser into the given destination collection, optionally using the given parser customizer.
      Parameters:
      fieldContext - field context or null for none
      destinationCollection - destination collection
      destinationItemType - type of destination collection item
      context - destination context stack (possibly empty)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseMap

      private void parseMap(Field fieldContext, Map<String,Object> destinationMap, Type valueType, ArrayList<Type> context, CustomizeJsonParser customizeParser) throws IOException
      Parse a JSON Object from the given JSON parser into the given destination map, optionally using the given parser customizer.
      Parameters:
      fieldContext - field context or null for none
      destinationMap - destination map
      valueType - valueType of the map value type parameter
      context - destination context stack (possibly empty)
      customizeParser - optional parser customizer or null for none
      Throws:
      IOException
    • parseValue

      private final Object parseValue(Field fieldContext, Type valueType, ArrayList<Type> context, Object destination, CustomizeJsonParser customizeParser, boolean handlePolymorphic) throws IOException
      Parse a value.
      Parameters:
      fieldContext - field context or null for none (for example into a map)
      valueType - value type or null if not known (for example into a map)
      context - destination context stack (possibly empty)
      destination - destination object instance or null for none (for example empty context stack)
      customizeParser - customize parser or null for none
      handlePolymorphic - whether or not to check for polymorphic schema
      Returns:
      parsed value
      Throws:
      IOException
    • getCachedTypemapFieldFor

      private static Field getCachedTypemapFieldFor(Class<?> key)
      Finds the Field on the given Class that has the JsonPolymorphicTypeMap annotation, or null if there is none.

      The class must contain exactly zero or one JsonPolymorphicTypeMap annotation.

      Parameters:
      key - The Class to search in, or null
      Returns:
      The Field with the JsonPolymorphicTypeMap annotation, or null either if there is none or if the key is null