/* Jackson JSON-processor.
*
* Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi
*/
package com.fasterxml.jackson.core;
Enumeration for basic token types used for returning results
of parsing JSON content.
/**
* Enumeration for basic token types used for returning results
* of parsing JSON content.
*/
public enum JsonToken
{
/* Some notes on implementation:
*
* - Entries are to be ordered such that start/end array/object
* markers come first, then field name marker (if any), and
* finally scalar value tokens. This is assumed by some
* typing checks.
*/
NOT_AVAILABLE can be returned if JsonParser
implementation can not currently return the requested token (usually next one), or even if any will be available, but that may be able to determine this in future. This is the case with non-blocking parsers -- they can not block to wait for more data to parse and must return something. /**
* NOT_AVAILABLE can be returned if {@link JsonParser}
* implementation can not currently return the requested
* token (usually next one), or even if any will be
* available, but that may be able to determine this in
* future. This is the case with non-blocking parsers --
* they can not block to wait for more data to parse and
* must return something.
*/
NOT_AVAILABLE(null, JsonTokenId.ID_NOT_AVAILABLE),
START_OBJECT is returned when encountering '{'
which signals starting of an Object value.
/**
* START_OBJECT is returned when encountering '{'
* which signals starting of an Object value.
*/
START_OBJECT("{", JsonTokenId.ID_START_OBJECT),
END_OBJECT is returned when encountering '}'
which signals ending of an Object value
/**
* END_OBJECT is returned when encountering '}'
* which signals ending of an Object value
*/
END_OBJECT("}", JsonTokenId.ID_END_OBJECT),
START_ARRAY is returned when encountering '['
which signals starting of an Array value
/**
* START_ARRAY is returned when encountering '['
* which signals starting of an Array value
*/
START_ARRAY("[", JsonTokenId.ID_START_ARRAY),
END_ARRAY is returned when encountering ']'
which signals ending of an Array value
/**
* END_ARRAY is returned when encountering ']'
* which signals ending of an Array value
*/
END_ARRAY("]", JsonTokenId.ID_END_ARRAY),
FIELD_NAME is returned when a String token is encountered
as a field name (same lexical value, different function)
/**
* FIELD_NAME is returned when a String token is encountered
* as a field name (same lexical value, different function)
*/
FIELD_NAME(null, JsonTokenId.ID_FIELD_NAME),
Placeholder token returned when the input source has a concept of embedded Object that are not accessible as usual structure (of starting with START_OBJECT
, having values, ending with END_OBJECT
), but as "raw" objects.
Note: this token is never returned by regular JSON readers, but
only by readers that expose other kinds of source (like
JsonNode
-based JSON trees, Maps, Lists and such).
/**
* Placeholder token returned when the input source has a concept
* of embedded Object that are not accessible as usual structure
* (of starting with {@link #START_OBJECT}, having values, ending with
* {@link #END_OBJECT}), but as "raw" objects.
*<p>
* Note: this token is never returned by regular JSON readers, but
* only by readers that expose other kinds of source (like
* <code>JsonNode</code>-based JSON trees, Maps, Lists and such).
*/
VALUE_EMBEDDED_OBJECT(null, JsonTokenId.ID_EMBEDDED_OBJECT),
VALUE_STRING is returned when a String token is encountered
in value context (array element, field value, or root-level
stand-alone value)
/**
* VALUE_STRING is returned when a String token is encountered
* in value context (array element, field value, or root-level
* stand-alone value)
*/
VALUE_STRING(null, JsonTokenId.ID_STRING),
VALUE_NUMBER_INT is returned when an integer numeric token is
encountered in value context: that is, a number that does
not have floating point or exponent marker in it (consists
only of an optional sign, followed by one or more digits;
or, for binary formats, is indicated as integral number
by internal representation).
/**
* VALUE_NUMBER_INT is returned when an integer numeric token is
* encountered in value context: that is, a number that does
* not have floating point or exponent marker in it (consists
* only of an optional sign, followed by one or more digits;
* or, for binary formats, is indicated as integral number
* by internal representation).
*/
VALUE_NUMBER_INT(null, JsonTokenId.ID_NUMBER_INT),
VALUE_NUMBER_FLOAT is returned when a numeric token other
than integer is encountered: that is, a number that does
have floating point or exponent marker in it, in addition
to one or more digits (or, for non-textual formats,
has internal floating-point representation).
/**
* VALUE_NUMBER_FLOAT is returned when a numeric token other
* than integer is encountered: that is, a number that does
* have floating point or exponent marker in it, in addition
* to one or more digits (or, for non-textual formats,
* has internal floating-point representation).
*/
VALUE_NUMBER_FLOAT(null, JsonTokenId.ID_NUMBER_FLOAT),
VALUE_TRUE is returned when encountering literal "true" in
value context
/**
* VALUE_TRUE is returned when encountering literal "true" in
* value context
*/
VALUE_TRUE("true", JsonTokenId.ID_TRUE),
VALUE_FALSE is returned when encountering literal "false" in
value context
/**
* VALUE_FALSE is returned when encountering literal "false" in
* value context
*/
VALUE_FALSE("false", JsonTokenId.ID_FALSE),
VALUE_NULL is returned when encountering literal "null" in
value context
/**
* VALUE_NULL is returned when encountering literal "null" in
* value context
*/
VALUE_NULL("null", JsonTokenId.ID_NULL),
;
final String _serialized;
final char[] _serializedChars;
final byte[] _serializedBytes;
final int _id;
final boolean _isStructStart, _isStructEnd;
final boolean _isNumber;
final boolean _isBoolean;
final boolean _isScalar;
Params: - token – representation for this token, if there is a
single static representation; null otherwise
- id – Numeric id from
JsonTokenId
/**
* @param token representation for this token, if there is a
* single static representation; null otherwise
* @param id Numeric id from {@link JsonTokenId}
*/
JsonToken(String token, int id)
{
if (token == null) {
_serialized = null;
_serializedChars = null;
_serializedBytes = null;
} else {
_serialized = token;
_serializedChars = token.toCharArray();
// It's all in ascii, can just case...
int len = _serializedChars.length;
_serializedBytes = new byte[len];
for (int i = 0; i < len; ++i) {
_serializedBytes[i] = (byte) _serializedChars[i];
}
}
_id = id;
_isBoolean = (id == JsonTokenId.ID_FALSE || id == JsonTokenId.ID_TRUE);
_isNumber = (id == JsonTokenId.ID_NUMBER_INT || id == JsonTokenId.ID_NUMBER_FLOAT);
_isStructStart = (id == JsonTokenId.ID_START_OBJECT || id == JsonTokenId.ID_START_ARRAY);
_isStructEnd = (id == JsonTokenId.ID_END_OBJECT || id == JsonTokenId.ID_END_ARRAY);
_isScalar = !_isStructStart && !_isStructEnd
&& (id != JsonTokenId.ID_FIELD_NAME)
&& (id != JsonTokenId.ID_NOT_AVAILABLE);
}
public final int id() { return _id; }
public final String asString() { return _serialized; }
public final char[] asCharArray() { return _serializedChars; }
public final byte[] asByteArray() { return _serializedBytes; }
Returns: True
if this token is VALUE_NUMBER_INT
or VALUE_NUMBER_FLOAT
, false
otherwise
/**
* @return {@code True} if this token is {@code VALUE_NUMBER_INT} or {@code VALUE_NUMBER_FLOAT},
* {@code false} otherwise
*/
public final boolean isNumeric() { return _isNumber; }
Accessor that is functionally equivalent to:
this == JsonToken.START_OBJECT || this == JsonToken.START_ARRAY
Returns: True
if this token is START_OBJECT
or START_ARRAY
, false
otherwiseSince: 2.3
/**
* Accessor that is functionally equivalent to:
* <code>
* this == JsonToken.START_OBJECT || this == JsonToken.START_ARRAY
* </code>
*
* @return {@code True} if this token is {@code START_OBJECT} or {@code START_ARRAY},
* {@code false} otherwise
*
* @since 2.3
*/
public final boolean isStructStart() { return _isStructStart; }
Accessor that is functionally equivalent to:
this == JsonToken.END_OBJECT || this == JsonToken.END_ARRAY
Returns: True
if this token is END_OBJECT
or END_ARRAY
, false
otherwiseSince: 2.3
/**
* Accessor that is functionally equivalent to:
* <code>
* this == JsonToken.END_OBJECT || this == JsonToken.END_ARRAY
* </code>
*
* @return {@code True} if this token is {@code END_OBJECT} or {@code END_ARRAY},
* {@code false} otherwise
*
* @since 2.3
*/
public final boolean isStructEnd() { return _isStructEnd; }
Method that can be used to check whether this token represents a valid non-structured value. This means all VALUE_xxx
tokens; excluding START_xxx
and END_xxx
tokens as well FIELD_NAME
. Returns: True
if this token is a scalar value token (one of VALUE_xxx
tokens), false
otherwise
/**
* Method that can be used to check whether this token represents
* a valid non-structured value. This means all {@code VALUE_xxx} tokens;
* excluding {@code START_xxx} and {@code END_xxx} tokens as well
* {@code FIELD_NAME}.
*
* @return {@code True} if this token is a scalar value token (one of
* {@code VALUE_xxx} tokens), {@code false} otherwise
*/
public final boolean isScalarValue() { return _isScalar; }
Returns: True
if this token is VALUE_TRUE
or VALUE_FALSE
, false
otherwise
/**
* @return {@code True} if this token is {@code VALUE_TRUE} or {@code VALUE_FALSE},
* {@code false} otherwise
*/
public final boolean isBoolean() { return _isBoolean; }
}