<!--

    Copyright (c) 2026 Contributors to the Eclipse Foundation

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

# Jakarta JSON Processing - 2.2
## JavaDoc Assertion Detail

| Totals | Total | Active | Deprecated | Removed |
|:-------|:-----:|:------:|:----------:|:-------:|
| # of Assertions | 412 | 282 | 0 | 130 |
| # of Required Assertions | 412 | 282 | 0 | 130 |
| # of Optional Assertions | 0 | 0 | 0 | 0 |

| ID | Return | Method/Field | Description | Required | Deprecated | Testable |
|:--:|:------:|:-------------|:------------|:--------:|:----------:|:--------:|
| JSONP:JAVADOC:6 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( JsonValue ) | Adds a value to the array. | true |  | true |
| JSONP:JAVADOC:8 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( String ) | Adds a value to the array as a JsonString. | true |  | true |
| JSONP:JAVADOC:10 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( BigDecimal ) | Adds a value to the array as a JsonNumber. | true |  | true |
| JSONP:JAVADOC:12 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( BigInteger ) | Adds a value to the array as a JsonNumber. | true |  | true |
| JSONP:JAVADOC:14 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int ) | Adds a value to the array as a JsonNumber. | true |  | true |
| JSONP:JAVADOC:16 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( long ) | Adds a value to the array as a JsonNumber. | true |  | true |
| JSONP:JAVADOC:18 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( double ) | Adds a value to the array as a JsonNumber. | true |  | true |
| JSONP:JAVADOC:21 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( boolean ) | Adds a JsonValue#TRUE or JsonValue#FALSE value to the array. | true |  | true |
| JSONP:JAVADOC:25 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.addNull | Adds a JsonValue#NULL value to the array. | true |  | true |
| JSONP:JAVADOC:37 | JsonException | jakarta.json.JsonException.JsonException ( String ) | Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to #initCause. | true |  | true |
| JSONP:JAVADOC:38 | JsonException | jakarta.json.JsonException.JsonException ( String , Throwable ) | Constructs a new runtime exception with the specified detail message and cause. Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message. | true |  | true |
| JSONP:JAVADOC:40 | BigDecimal | jakarta.json.JsonNumber.bigDecimalValue | Returns this JSON number as a BigDecimal object. | true |  | true |
| JSONP:JAVADOC:41 | BigInteger | jakarta.json.JsonNumber.bigIntegerValue | Returns this JSON number as a BigInteger object. This is a a convenience method for bigDecimalValue().toBigInteger(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. | true |  | true |
| JSONP:JAVADOC:42 | BigInteger | jakarta.json.JsonNumber.bigIntegerValueExact | Returns this JSON number as a BigInteger object. This is a convenience method for bigDecimalValue().toBigIntegerExact(). | true |  | true |
| JSONP:JAVADOC:44 | double | jakarta.json.JsonNumber.doubleValue | Returns this JSON number as a double. This is a a convenience method for bigDecimalValue().doubleValue(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. | true |  | true |
| JSONP:JAVADOC:45 | int | jakarta.json.JsonNumber.intValue | Returns this JSON number as an int. Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. | true |  | true |
| JSONP:JAVADOC:46 | int | jakarta.json.JsonNumber.intValueExact | Returns this JSON number as an int. | true |  | true |
| JSONP:JAVADOC:48 | long | jakarta.json.JsonNumber.longValue | Returns this JSON number as a long. Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. | true |  | true |
| JSONP:JAVADOC:49 | long | jakarta.json.JsonNumber.longValueExact | Returns this JSON number as a long. | true |  | true |
| JSONP:JAVADOC:51 | boolean | jakarta.json.JsonNumber.isIntegral | Returns true if this JSON number is a integral number. This method semantics are defined using bigDecimalValue().scale(). If the scale is zero, then it is considered integral type. This integral type information can be used to invoke an appropriate accessor method to obtain a numeric value as in the following example: JsonNumber num = ... if (num.isIntegral()) { num.longValue(); // or other methods to get integral value } else { num.doubleValue(); // or other methods to get decimal number value } | true |  | true |
| JSONP:JAVADOC:58 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , JsonValue ) | Adds a name/JsonValue pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:61 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , String ) | Adds a name/JsonString pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:64 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , BigInteger ) | Adds a name/JsonNumber pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:67 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , BigDecimal ) | Adds a name/JsonNumber pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:70 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , int ) | Adds a name/JsonNumber pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:73 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , long ) | Adds a name/JsonNumber pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:76 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , double ) | Adds a name/JsonNumber pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:80 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , boolean ) | Adds a name/JsonValue#TRUE or name/JsonValue#FALSE pair to the JSON object associated with this object builder. If the object contains a mapping for the specified name, this method replaces the old value with the specified value. | true |  | true |
| JSONP:JAVADOC:86 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.addNull ( String ) | Adds a name/JsonValue#NULL pair to the JSON object associated with this object builder where the value is null. If the object contains a mapping for the specified name, this method replaces the old value with null. | true |  | true |
| JSONP:JAVADOC:96 | void | jakarta.json.JsonReader.close | Closes this reader and frees any resources associated with the reader. This method closes the underlying input source. | true |  | true |
| JSONP:JAVADOC:97 | JsonReader | jakarta.json.Json.createReader ( Reader ) | Creates a JSON reader from a character stream. | true |  | true |
| JSONP:JAVADOC:101 | String | jakarta.json.JsonString.getString | Returns the JSON string value. | true |  | true |
| JSONP:JAVADOC:102 | ValueType | jakarta.json.JsonValue.getValueType | Returns the value type of this JSON value. | true |  | true |
| JSONP:JAVADOC:103 | ValueType | jakarta.json.JsonValue.ValueType.valueOf ( String ) |  | true |  | true |
| JSONP:JAVADOC:104 | ValueType[] | jakarta.json.JsonValue.ValueType.values |  | true |  | true |
| JSONP:JAVADOC:105 | void | jakarta.json.JsonWriter.close |  | true |  | true |
| JSONP:JAVADOC:106 | JsonWriter | jakarta.json.Json.createWriter ( Writer ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified character stream. | true |  | true |
| JSONP:JAVADOC:107 | void | jakarta.json.JsonWriter.writeArray ( JsonArray ) | Writes the specified JSON JsonArray array to the output source. This method needs to be called only once for a writer instance. | true |  | true |
| JSONP:JAVADOC:110 | void | jakarta.json.JsonWriter.writeObject ( JsonObject ) | Writes the specified JSON JsonObject object to the output source. This method needs to be called only once for a writer instance. | true |  | true |
| JSONP:JAVADOC:115 | void | jakarta.json.stream.JsonGenerator.close | Closes this generator and frees any resources associated with it. This method closes the underlying output source. | true |  | true |
| JSONP:JAVADOC:117 | void | jakarta.json.stream.JsonParser.close | Closes this parser and frees any resources associated with the parser. This method closes the underlying input source. | true |  | true |
| JSONP:JAVADOC:120 | boolean | jakarta.json.stream.JsonParser.isIntegralNumber | Returns true if the JSON number at the current parser state is a integral number. A BigDecimal may be used to store the value internally and this method semantics are defined using its scale(). If the scale is zero, then it is considered integral type. This integral type information can be used to invoke an appropriate accessor method to obtain a numeric value as in the following example: JsonParser parser = ... if (parser.isIntegralNumber()) { parser.getInt(); // or other methods to get integral value } else { parser.getBigDecimal(); } | true |  | true |
| JSONP:JAVADOC:122 | String | jakarta.json.stream.JsonParser.getString | Returns a String for the name in a name/value pair, for a string value or a number value. This method should only be called when the parser state is Event#KEY_NAME, Event#VALUE_STRING, or Event#VALUE_NUMBER. | true |  | true |
| JSONP:JAVADOC:128 | Event | jakarta.json.stream.JsonParser.Event.valueOf ( String ) |  | true |  | true |
| JSONP:JAVADOC:129 | Event[] | jakarta.json.stream.JsonParser.Event.values |  | true |  | true |
| JSONP:JAVADOC:131 | JsonGenerator | jakarta.json.Json.createGenerator ( Writer ) | Creates a JSON generator for writing JSON to a character stream. | true |  | true |
| JSONP:JAVADOC:133 | JsonParser | jakarta.json.Json.createParser ( Reader ) | Creates a JSON parser from a character stream. | true |  | true |
| JSONP:JAVADOC:144 | JsonGenerator | jakarta.json.spi.JsonProvider.createGenerator ( Writer ) | Creates a JSON generator for writing JSON text to a character stream. | true |  | true |
| JSONP:JAVADOC:146 | JsonParser | jakarta.json.spi.JsonProvider.createParser ( Reader ) | Creates a JSON parser from a character stream. | true |  | true |
| JSONP:JAVADOC:152 | JsonProvider | jakarta.json.spi.JsonProvider.provider | Creates a JSON provider object. The provider is loaded using the ServiceLoader#load(Class) method. If there are no available service providers, this method returns the default service provider. Users are recommended to cache the result of this method. | true |  | true |
| JSONP:JAVADOC:162 | JsonGenerator | jakarta.json.stream.JsonGeneratorFactory.createGenerator ( Writer ) | Creates a JSON generator to write JSON text to a character stream. The generator is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:163 | JsonGenerator | jakarta.json.stream.JsonGeneratorFactory.createGenerator ( OutputStream , Charset ) | Creates a JSON generator to write JSON text to a byte stream. Characters written to the stream are encoded into bytes using the specified charset. The generator is configured with the factory's configuration. | true |  | true |
| JSONP:JAVADOC:164 | JsonParser | jakarta.json.stream.JsonParserFactory.createParser ( Reader ) | Creates a JSON parser from a character stream. | true |  | true |
| JSONP:JAVADOC:165 | JsonParser | jakarta.json.stream.JsonParserFactory.createParser ( InputStream ) | Creates a JSON parser from the specified byte stream. The character encoding of the stream is determined as specified in RFC 7159. | true |  | true |
| JSONP:JAVADOC:166 | JsonParser | jakarta.json.stream.JsonParserFactory.createParser ( JsonObject ) | Creates a JSON parser from the specified JSON object. | true |  | true |
| JSONP:JAVADOC:167 | JsonParser | jakarta.json.stream.JsonParserFactory.createParser ( JsonArray ) | Creates a JSON parser from the specified JSON array. | true |  | true |
| JSONP:JAVADOC:168 | JsonGenerator | jakarta.json.Json.createGenerator ( OutputStream ) | Creates a JSON generator for writing JSON to a byte stream. | true |  | true |
| JSONP:JAVADOC:172 | JsonParser | jakarta.json.Json.createParser ( InputStream ) | Creates a JSON parser from a byte stream. The character encoding of the stream is determined as specified in RFC 7159. | true |  | true |
| JSONP:JAVADOC:178 | JsonReader | jakarta.json.Json.createReader ( InputStream ) | Creates a JSON reader from a byte stream. The character encoding of the stream is determined as described in RFC 7159. | true |  | true |
| JSONP:JAVADOC:181 | JsonStructure | jakarta.json.JsonReader.read | Returns a JSON array or object that is represented in the input source. This method needs to be called only once for a reader instance. | true |  | true |
| JSONP:JAVADOC:184 | JsonArray | jakarta.json.JsonReader.readArray | Returns a JSON array that is represented in the input source. This method needs to be called only once for a reader instance. | true |  | true |
| JSONP:JAVADOC:185 | JsonObject | jakarta.json.JsonReader.readObject | Returns a JSON object that is represented in the input source. This method needs to be called only once for a reader instance. | true |  | true |
| JSONP:JAVADOC:187 | JsonWriter | jakarta.json.Json.createWriter ( OutputStream ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified byte stream. Characters written to the stream are encoded into bytes using UTF-8 encoding. | true |  | true |
| JSONP:JAVADOC:191 | void | jakarta.json.JsonWriter.write ( JsonStructure ) | Writes the specified JSON JsonObject object or JsonArray array to the output source. This method needs to be called only once for a writer instance. | true |  | true |
| JSONP:JAVADOC:192 | JsonGenerator | jakarta.json.spi.JsonProvider.createGenerator ( OutputStream ) | Creates a JSON generator for writing JSON text to a byte stream. | true |  | true |
| JSONP:JAVADOC:196 | JsonParser | jakarta.json.spi.JsonProvider.createParser ( InputStream ) | Creates a JSON parser from the specified byte stream. The character encoding of the stream is determined as defined in RFC 7159 . | true |  | true |
| JSONP:JAVADOC:200 | JsonGenerator | jakarta.json.stream.JsonGeneratorFactory.createGenerator ( OutputStream ) | Creates a JSON generator to write JSON text to a byte stream. Characters written to the stream are encoded into bytes using UTF-8 encoding. The generator is configured with the factory's configuration. | true |  | true |
| JSONP:JAVADOC:201 | JsonParser | jakarta.json.stream.JsonParserFactory.createParser ( InputStream , Charset ) | Creates a JSON parser from the specified byte stream. The bytes of the stream are decoded to characters using the specified charset. | true |  | true |
| JSONP:JAVADOC:215 | String | jakarta.json.JsonNumber.toString | Returns a JSON text representation of the JSON number. The representation is equivalent to BigDecimal#toString(). | true |  | true |
| JSONP:JAVADOC:235 | BigDecimal | jakarta.json.stream.JsonParser.getBigDecimal | Returns a JSON number as a BigDecimal. The BigDecimal is created using new BigDecimal(getString()). This method should only called when the parser state is Event#VALUE_NUMBER. | true |  | true |
| JSONP:JAVADOC:237 | int | jakarta.json.stream.JsonParser.getInt | Returns a JSON number as an integer. The returned value is equal to new BigDecimal(getString()).intValue(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. This method should only be called when the parser state is Event#VALUE_NUMBER. | true |  | true |
| JSONP:JAVADOC:239 | long | jakarta.json.stream.JsonParser.getLong | Returns a JSON number as a long. The returned value is equal to new BigDecimal(getString()).longValue(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign. This method is only called when the parser state is Event#VALUE_NUMBER. | true |  | true |
| JSONP:JAVADOC:250 | boolean | jakarta.json.JsonNumber.equals ( Object ) | Compares the specified object with this JsonNumber object for equality. Returns true if and only if the type of the specified object is also JsonNumber and their #bigDecimalValue() objects are equal | true |  | true |
| JSONP:JAVADOC:251 | int | jakarta.json.JsonNumber.hashCode | Returns the hash code value for this JsonNumber object. The hash code of a JsonNumber object is defined as the hash code of its #bigDecimalValue() object. | true |  | true |
| JSONP:JAVADOC:254 | boolean | jakarta.json.JsonString.equals ( Object ) | Compares the specified object with this JsonString for equality. Returns true if and only if the specified object is also a JsonString, and their #getString() objects are equal. | true |  | true |
| JSONP:JAVADOC:255 | int | jakarta.json.JsonString.hashCode | Returns the hash code value for this JsonString object. The hash code of a JsonString object is defined to be its #getString() object's hash code. | true |  | true |
| JSONP:JAVADOC:262 | int | jakarta.json.JsonArray.getInt ( int ) | A convenience method for getJsonNumber(index).intValue(). | true |  | true |
| JSONP:JAVADOC:263 | String | jakarta.json.JsonArray.getString ( int ) | A convenience method for getJsonString(index).getString(). | true |  | true |
| JSONP:JAVADOC:264 | int | jakarta.json.JsonObject.getInt ( String ) | A convenience method for getJsonNumber(name).intValue() | true |  | true |
| JSONP:JAVADOC:265 | String | jakarta.json.JsonObject.getString ( String ) | A convenience method for getJsonString(name).getString() | true |  | true |
| JSONP:JAVADOC:278 | JsonGenerationException | jakarta.json.stream.JsonGenerationException.JsonGenerationException ( String ) | Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to #initCause. | true |  | true |
| JSONP:JAVADOC:279 | JsonGenerationException | jakarta.json.stream.JsonGenerationException.JsonGenerationException ( String , Throwable ) | Constructs a new runtime exception with the specified detail message and cause. Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message. | true |  | true |
| JSONP:JAVADOC:285 | JsonParsingException | jakarta.json.stream.JsonParsingException.JsonParsingException ( String , JsonLocation ) | Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to #initCause. | true |  | true |
| JSONP:JAVADOC:286 | JsonParsingException | jakarta.json.stream.JsonParsingException.JsonParsingException ( String , Throwable , JsonLocation ) | Constructs a new runtime exception with the specified detail message and cause. Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message. | true |  | true |
| JSONP:JAVADOC:288 | String | jakarta.json.JsonValue.toString | Returns JSON text for this JSON value. | true |  | true |
| JSONP:JAVADOC:289 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeEnd | Writes the end of the current context. If the current context is an array context, this method writes the end-of-array character (']'). If the current context is an object context, this method writes the end-of-object character ('}'). After writing the end of the current context, the parent context becomes the new current context. If parent context is field context, it is closed. | true |  | true |
| JSONP:JAVADOC:291 | void | jakarta.json.stream.JsonGenerator.flush | Flushes the underlying output source. If the generator has saved any characters in a buffer, writes them immediately to the underlying output source before flushing it. | true |  | true |
| JSONP:JAVADOC:292 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , JsonValue ) | Writes a JSON name/value pair in the current object context. | true |  | true |
| JSONP:JAVADOC:295 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , String ) | Writes a JSON name/string value pair in the current object context. The specified value is written as JSON string value. | true |  | true |
| JSONP:JAVADOC:298 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , BigInteger ) | Writes a JSON name/number value pair in the current object context. The specified value is written as a JSON number value. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:301 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , BigDecimal ) | Writes a JSON name/number value pair in the current object context. The specified value is written as a JSON number value. The specified value's toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:304 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , int ) | Writes a JSON name/number value pair in the current object context. The specified value is written as a JSON number value. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:307 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , long ) | Writes a JSON name/number value pair in the current object context. The specified value is written as a JSON number value. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:310 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , double ) | Writes a JSON name/number value pair in the current object context. The specified value is written as a JSON number value. The string BigDecimal.valueOf(double).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:314 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String , boolean ) | Writes a JSON name/boolean value pair in the current object context. If value is true, it writes the JSON true value, otherwise it writes the JSON false value. | true |  | true |
| JSONP:JAVADOC:317 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( JsonValue ) | Writes the specified value as a JSON value within the current array, field or root context. | true |  | true |
| JSONP:JAVADOC:319 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( String ) | Writes the specified value as a JSON string value within the current array, field or root context. | true |  | true |
| JSONP:JAVADOC:321 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( BigDecimal ) | Writes the specified value as a JSON number value within the current array, field or root context. The specified value's toString() is used as the the text value for writing. | true |  | true |
| JSONP:JAVADOC:323 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( BigInteger ) | Writes the specified value as a JSON number value within the current array, field or root context. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:325 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( int ) | Writes the specified value as a JSON number value within the current array, field or root context. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:327 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( long ) | Writes the specified value as a JSON number value within the current array, field or root context. The string new BigDecimal(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:329 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( double ) | Writes the specified value as a JSON number value within the current array, field or root context. The string BigDecimal.valueOf(value).toString() is used as the text value for writing. | true |  | true |
| JSONP:JAVADOC:332 | JsonGenerator | jakarta.json.stream.JsonGenerator.write ( boolean ) | Writes a JSON true or false value within the current array, field or root context. If value is true, this method writes the JSON true value, otherwise it writes the JSON false value. | true |  | true |
| JSONP:JAVADOC:334 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeNull ( String ) | Writes a JSON name/null value pair in an current object context. | true |  | true |
| JSONP:JAVADOC:337 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeNull | Writes a JSON null value within the current array, field or root context. | true |  | true |
| JSONP:JAVADOC:339 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeStartArray | Writes the JSON start array character. It starts a new child array context within which JSON values can be written to the array. This method is valid only in an array context, field context or in no context (when a context is not yet started). This method can only be called once in no context. | true |  | true |
| JSONP:JAVADOC:340 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeStartArray ( String ) | Writes the JSON name/start array character pair with in the current object context. It starts a new child array context within which JSON values can be written to the array. | true |  | true |
| JSONP:JAVADOC:341 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeStartObject | Writes the JSON start object character. It starts a new child object context within which JSON name/value pairs can be written to the object. This method is valid only in an array context, field context or in no context (when a context is not yet started). This method can only be called once in no context. | true |  | true |
| JSONP:JAVADOC:342 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeStartObject ( String ) | Writes the JSON name/start object character pair in the current object context. It starts a new child object context within which JSON name/value pairs can be written to the object. | true |  | true |
| JSONP:JAVADOC:375 | boolean | jakarta.json.stream.JsonParser.hasNext | Returns true if there are more parsing states. This method returns false if the parser reaches the end of the JSON text. | true |  | true |
| JSONP:JAVADOC:376 | Event | jakarta.json.stream.JsonParser.next | Returns the event for the next parsing state. | true |  | true |
| JSONP:JAVADOC:383 | CharSequence | jakarta.json.JsonString.getChars | Returns the char sequence for the JSON String value | true |  | true |
| JSONP:JAVADOC:400 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( JsonObjectBuilder ) | Adds a JsonObject from an object builder to the array. | true |  | true |
| JSONP:JAVADOC:401 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( JsonArrayBuilder ) | Adds a JsonArray from an array builder to the array. | true |  | true |
| JSONP:JAVADOC:402 | JsonArray | jakarta.json.JsonArrayBuilder.build | Returns the current array. | true |  | true |
| JSONP:JAVADOC:403 | JsonArrayBuilder | jakarta.json.Json.createArrayBuilder | Creates a JSON array builder | true |  | true |
| JSONP:JAVADOC:404 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , JsonObjectBuilder ) | Adds a name/JsonObject pair to the JSON object associated with this object builder. The value JsonObject is built from the specified object builder. If the object contains a mapping for the specified name, this method replaces the old value with the JsonObject from the specified object builder. | true |  | true |
| JSONP:JAVADOC:406 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.add ( String , JsonArrayBuilder ) | Adds a name/JsonArray pair to the JSON object associated with this object builder. The value JsonArray is built from the specified array builder. If the object contains a mapping for the specified name, this method replaces the old value with the JsonArray from the specified array builder. | true |  | true |
| JSONP:JAVADOC:408 | JsonObject | jakarta.json.JsonObjectBuilder.build | Returns the JSON object associated with this object builder. The iteration order for the JsonObject is based on the order in which name/value pairs are added to the object using this builder. | true |  | true |
| JSONP:JAVADOC:409 | JsonObjectBuilder | jakarta.json.Json.createObjectBuilder | Creates a JSON object builder | true |  | true |
| JSONP:JAVADOC:416 | JsonGeneratorFactory | jakarta.json.Json.createGeneratorFactory ( Map ) | Creates a generator factory for creating JsonGenerator objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:417 | JsonParserFactory | jakarta.json.Json.createParserFactory ( Map ) | Creates a parser factory for creating JsonParser objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:419 | JsonReader | jakarta.json.JsonReaderFactory.createReader ( Reader ) | Creates a JSON reader from a character stream. The reader is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:420 | JsonReader | jakarta.json.JsonReaderFactory.createReader ( InputStream , Charset ) | Creates a JSON reader from a byte stream. The bytes of the stream are decoded to characters using the specified charset. The reader is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:422 | JsonWriter | jakarta.json.JsonWriterFactory.createWriter ( Writer ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified character stream. The writer is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:423 | JsonWriter | jakarta.json.JsonWriterFactory.createWriter ( OutputStream ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified byte stream. Characters written to the stream are encoded into bytes using UTF-8 encoding. The writer is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:424 | JsonWriter | jakarta.json.JsonWriterFactory.createWriter ( OutputStream , Charset ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified byte stream. Characters written to the stream are encoded into bytes using the specified charset. The writer is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:425 | JsonGeneratorFactory | jakarta.json.spi.JsonProvider.createGeneratorFactory ( Map ) | Creates a generator factory for creating JsonGenerator instances. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:426 | JsonParserFactory | jakarta.json.spi.JsonProvider.createParserFactory ( Map ) | Creates a parser factory for creating JsonParser instances. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:427 | Map | jakarta.json.stream.JsonGeneratorFactory.getConfigInUse | Returns a read-only map of supported provider specific configuration properties that are used to configure the JSON generators. If there are any specified configuration properties that are not supported by the provider, they won't be part of the returned map. | true |  | true |
| JSONP:JAVADOC:428 | Map | jakarta.json.stream.JsonParserFactory.getConfigInUse | Returns a read-only map of supported provider specific configuration properties that are used to configure the JSON parsers. If there are any specified configuration properties that are not supported by the provider, they won't be part of the returned map. | true |  | true |
| JSONP:JAVADOC:429 | JsonReader | jakarta.json.JsonReaderFactory.createReader ( InputStream ) | Creates a JSON reader from a byte stream. The character encoding of the stream is determined as described in RFC 7159. The reader is configured with the factory configuration. | true |  | true |
| JSONP:JAVADOC:430 | boolean | jakarta.json.JsonArray.getBoolean ( int ) | Returns the boolean value at the specified position. If the value at the specified position is JsonValue.TRUE this method returns true. If the value at the specified position is JsonValue.FALSE this method returns false. | true |  | true |
| JSONP:JAVADOC:433 | boolean | jakarta.json.JsonArray.getBoolean ( int , boolean ) | Returns the boolean value at the specified position. If the value at the specified position is JsonValue.TRUE this method returns true. If the value at the specified position is JsonValue.FALSE this method returns false. Otherwise this method returns the specified default value. | true |  | true |
| JSONP:JAVADOC:434 | int | jakarta.json.JsonArray.getInt ( int , int ) | Returns the int value of the JsonNumber at the specified position. If the value at that position is a JsonNumber, this method returns jakarta.json.JsonNumber#intValue(). Otherwise this method returns the specified default value. | true |  | true |
| JSONP:JAVADOC:435 | String | jakarta.json.JsonArray.getString ( int , String ) | Returns the String value of JsonString at the specified position in this JSON array values. If JsonString is found, its jakarta.json.JsonString#getString() is returned. Otherwise, the specified default value is returned. | true |  | true |
| JSONP:JAVADOC:436 | boolean | jakarta.json.JsonObject.getBoolean ( String ) | Returns the boolean value of the associated mapping for the specified name. If the associated mapping is JsonValue.TRUE, then returns true. If the associated mapping is JsonValue.FALSE, then returns false. | true |  | true |
| JSONP:JAVADOC:439 | boolean | jakarta.json.JsonObject.getBoolean ( String , boolean ) | Returns the boolean value of the associated mapping for the specified name. If the associated mapping is JsonValue.TRUE, then returns true. If the associated mapping is JsonValue.FALSE, then returns false. Otherwise, the specified default value is returned. | true |  | true |
| JSONP:JAVADOC:441 | int | jakarta.json.JsonObject.getInt ( String , int ) | Returns the int value of the associated JsonNumber mapping for the specified name. If JsonNumber is found, then its jakarta.json.JsonNumber#intValue() is returned. Otherwise, the specified default value is returned. | true |  | true |
| JSONP:JAVADOC:443 | String | jakarta.json.JsonObject.getString ( String , String ) | Returns the string value of the associated JsonString mapping for the specified name. If JsonString is found, then its jakarta.json.JsonString#getString() is returned. Otherwise, the specified default value is returned. | true |  | true |
| JSONP:JAVADOC:445 | JsonBuilderFactory | jakarta.json.Json.createBuilderFactory ( Map ) | Creates a builder factory for creating JsonArrayBuilder and JsonObjectBuilder objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:449 | JsonReaderFactory | jakarta.json.Json.createReaderFactory ( Map ) | Creates a reader factory for creating JsonReader objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:452 | JsonWriterFactory | jakarta.json.Json.createWriterFactory ( Map ) | Creates a writer factory for creating JsonWriter objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:453 | JsonArrayBuilder | jakarta.json.JsonBuilderFactory.createArrayBuilder | Creates a JsonArrayBuilder instance that is used to build JsonArray | true |  | true |
| JSONP:JAVADOC:454 | JsonObjectBuilder | jakarta.json.JsonBuilderFactory.createObjectBuilder | Creates a JsonObjectBuilder instance that is used to build JsonObject. | true |  | true |
| JSONP:JAVADOC:455 | Map | jakarta.json.JsonBuilderFactory.getConfigInUse | Returns read-only map of supported provider specific configuration properties that are used to configure the created JSON builders. If there are any specified configuration properties that are not supported by the provider, they won't be part of the returned map. | true |  | true |
| JSONP:JAVADOC:459 | Map | jakarta.json.JsonReaderFactory.getConfigInUse | Returns read-only map of supported provider specific configuration properties that are used to configure the created JSON readers. If there are any specified configuration properties that are not supported by the provider, they won't be part of the returned map. | true |  | true |
| JSONP:JAVADOC:463 | Map | jakarta.json.JsonWriterFactory.getConfigInUse | Returns read-only map of supported provider specific configuration properties that are used to configure the created JSON writer objects. If there are any specified configuration properties that are not supported by the provider, they won't be part of the returned map. | true |  | true |
| JSONP:JAVADOC:464 | JsonArrayBuilder | jakarta.json.spi.JsonProvider.createArrayBuilder | Creates a JSON array builder. | true |  | true |
| JSONP:JAVADOC:465 | JsonBuilderFactory | jakarta.json.spi.JsonProvider.createBuilderFactory ( Map ) | Creates a builder factory for creating JsonArrayBuilder and JsonObjectBuilder objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:466 | JsonObjectBuilder | jakarta.json.spi.JsonProvider.createObjectBuilder | Creates a JSON object builder. | true |  | true |
| JSONP:JAVADOC:467 | JsonReader | jakarta.json.spi.JsonProvider.createReader ( Reader ) | Creates a JSON reader from a character stream. | true |  | true |
| JSONP:JAVADOC:468 | JsonReader | jakarta.json.spi.JsonProvider.createReader ( InputStream ) | Creates a JSON reader from a byte stream. The character encoding of the stream is determined as described in RFC 7159. | true |  | true |
| JSONP:JAVADOC:469 | JsonReaderFactory | jakarta.json.spi.JsonProvider.createReaderFactory ( Map ) | Creates a reader factory for creating JsonReader objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:470 | JsonWriter | jakarta.json.spi.JsonProvider.createWriter ( Writer ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified character stream. | true |  | true |
| JSONP:JAVADOC:471 | JsonWriter | jakarta.json.spi.JsonProvider.createWriter ( OutputStream ) | Creates a JSON writer to write a JSON JsonObject object or JsonArray array structure to the specified byte stream. Characters written to the stream are encoded into bytes using UTF-8 encoding. | true |  | true |
| JSONP:JAVADOC:472 | JsonWriterFactory | jakarta.json.spi.JsonProvider.createWriterFactory ( Map ) | Creates a writer factory for creating JsonWriter objects. The factory is configured with the specified map of provider specific configuration properties. Provider implementations should ignore any unsupported configuration properties specified in the map. | true |  | true |
| JSONP:JAVADOC:474 | long | jakarta.json.stream.JsonLocation.getColumnNumber | Return the column number (starts with 1 for the first column) for the current JSON event in the input source. | true |  | true |
| JSONP:JAVADOC:475 | long | jakarta.json.stream.JsonLocation.getLineNumber | Return the line number (starts with 1 for the first line) for the current JSON event in the input source. | true |  | true |
| JSONP:JAVADOC:476 | long | jakarta.json.stream.JsonLocation.getStreamOffset | Return the stream offset into the input source this location is pointing to. If the input source is a file or a byte stream then this is the byte offset into that stream, but if the input source is a character media then the offset is the character offset. Returns -1 if there is no offset available. | true |  | true |
| JSONP:JAVADOC:477 | JsonLocation | jakarta.json.stream.JsonParser.getLocation | Return the location that corresponds to the parser's current state in the JSON input source. The location information is only valid in the current parser state (or until the parser is advanced to a next state). | true |  | true |
| JSONP:JAVADOC:478 | JsonLocation | jakarta.json.stream.JsonParsingException.getLocation | Return the location of the incorrect JSON. | true |  | true |
| JSONP:JAVADOC:481 | List | jakarta.json.JsonArray.getValuesAs ( Class ) | Returns a list view of the specified type for the array. This method does not verify if there is a value of wrong type in the array. Providing this typesafe view dynamically may cause a program fail with a ClassCastException, if there is a value of wrong type in this array. Unfortunately, the exception can occur at any time after this method returns. | true |  | true |
| JSONP:JAVADOC:490 | JsonArray | jakarta.json.JsonArray.getJsonArray ( int ) | Returns the array value at the specified position in this array. This is a convenience method for (JsonArray)get(index). | true |  | true |
| JSONP:JAVADOC:493 | JsonNumber | jakarta.json.JsonArray.getJsonNumber ( int ) | Returns the number value at the specified position in this array. This is a convenience method for (JsonNumber)get(index). | true |  | true |
| JSONP:JAVADOC:496 | JsonObject | jakarta.json.JsonArray.getJsonObject ( int ) | Returns the object value at the specified position in this array. This is a convenience method for (JsonObject)get(index). | true |  | true |
| JSONP:JAVADOC:499 | JsonString | jakarta.json.JsonArray.getJsonString ( int ) | Returns the string value at ths specified position in this array. This is a convenience method for (JsonString)get(index). | true |  | true |
| JSONP:JAVADOC:506 | boolean | jakarta.json.JsonArray.isNull ( int ) | Returns true if the value at the specified location in this array is JsonValue.NULL. | true |  | true |
| JSONP:JAVADOC:527 | JsonArray | jakarta.json.JsonObject.getJsonArray ( String ) | Returns the array value to which the specified name is mapped. This is a convenience method for (JsonArray)get(name) to get the value. | true |  | true |
| JSONP:JAVADOC:529 | JsonNumber | jakarta.json.JsonObject.getJsonNumber ( String ) | Returns the number value to which the specified name is mapped. This is a convenience method for (JsonNumber)get(name) to get the value. | true |  | true |
| JSONP:JAVADOC:531 | JsonObject | jakarta.json.JsonObject.getJsonObject ( String ) | Returns the object value to which the specified name is mapped. This is a convenience method for (JsonObject)get(name) to get the value. | true |  | true |
| JSONP:JAVADOC:533 | JsonString | jakarta.json.JsonObject.getJsonString ( String ) | Returns the string value to which the specified name is mapped. This is a convenience method for (JsonString)get(name) to get the value. | true |  | true |
| JSONP:JAVADOC:539 | boolean | jakarta.json.JsonObject.isNull ( String ) | Returns true if the associated value for the specified name is JsonValue.NULL. | true |  | true |
| JSONP:JAVADOC:572 | JsonArrayBuilder | jakarta.json.Json.createArrayBuilder ( JsonArray ) | Creates a JSON array builder, initialized with the specified array | true |  | true |
| JSONP:JAVADOC:573 | JsonArrayBuilder | jakarta.json.Json.createArrayBuilder ( Collection ) | Creates a JSON array builder, initialized with the specified array | true |  | true |
| JSONP:JAVADOC:574 | JsonPatch | jakarta.json.Json.createDiff ( JsonStructure , JsonStructure ) | Generates a JSON Patch (RFC 6902) from the source and target JsonStructure. The generated JSON Patch need not be unique. | true |  | true |
| JSONP:JAVADOC:575 | JsonMergePatch | jakarta.json.Json.createMergeDiff ( JsonValue , JsonValue ) | Generates a JSON Merge Patch (RFC 7396) from the source and target JsonValues which when applied to the source, yields the target. | true |  | true |
| JSONP:JAVADOC:576 | JsonMergePatch | jakarta.json.Json.createMergePatch ( JsonValue ) | Creates JSON Merge Patch (RFC 7396) from specified JsonValue. | true |  | true |
| JSONP:JAVADOC:577 | JsonObjectBuilder | jakarta.json.Json.createObjectBuilder ( JsonObject ) | Creates a JSON object builder, initialized with the specified object. | true |  | true |
| JSONP:JAVADOC:578 | JsonObjectBuilder | jakarta.json.Json.createObjectBuilder ( Map ) | Creates a JSON object builder, initialized with the specified object. | true |  | true |
| JSONP:JAVADOC:579 | JsonPatch | jakarta.json.Json.createPatch ( JsonArray ) | Creates a JSON Patch (RFC 6902) from the specified operations. | true |  | true |
| JSONP:JAVADOC:580 | JsonPatchBuilder | jakarta.json.Json.createPatchBuilder | Creates a JSON Patch builder (RFC 6902). | true |  | true |
| JSONP:JAVADOC:581 | JsonPatchBuilder | jakarta.json.Json.createPatchBuilder ( JsonArray ) | Creates a JSON Patch builder (RFC 6902), initialized with the specified operations. | true |  | true |
| JSONP:JAVADOC:582 | JsonPointer | jakarta.json.Json.createPointer ( String ) | Creates JSON Pointer (RFC 6901) from given jsonPointer string. An empty jsonPointer string defines a reference to the target itself. If the jsonPointer string is non-empty, it must be a sequence of '/' prefixed tokens. | true |  | true |
| JSONP:JAVADOC:583 | JsonString | jakarta.json.Json.createValue ( String ) | Creates a JsonString. | true |  | true |
| JSONP:JAVADOC:584 | JsonNumber | jakarta.json.Json.createValue ( int ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:585 | JsonNumber | jakarta.json.Json.createValue ( long ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:586 | JsonNumber | jakarta.json.Json.createValue ( double ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:587 | JsonNumber | jakarta.json.Json.createValue ( BigDecimal ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:588 | JsonNumber | jakarta.json.Json.createValue ( BigInteger ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:589 | List | jakarta.json.JsonArray.getValuesAs ( Function ) | Returns a list view for the array. The value and the type of the elements in the list is specified by the func argument. This method can be used to obtain a list of the unwrapped types, such as List strings = ary1.getValuesAs(JsonString::getString); List ints = ary2.getValuesAs(JsonNumber::intValue); or a list of simple projections, such as List stringsizes = ary1.getValueAs((JsonString v)-&gt;v.getString().length(); | true |  | true |
| JSONP:JAVADOC:590 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , JsonValue ) | Inserts a value to the array at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:591 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , String ) | Adds a value to the array as a JsonString at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:592 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , BigDecimal ) | Adds a value to the array as a JsonNumber at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:593 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , BigInteger ) | Adds a value to the array as a JsonNumber at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:594 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , int ) | Adds a value to the array as a JsonNumber at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:595 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , long ) | Adds a value to the array as a JsonNumber at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:596 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , double ) | Adds a value to the array as a JsonNumber at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:597 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , boolean ) | Adds a JsonValue#TRUE or JsonValue#FALSE value to the array at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:598 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , JsonObjectBuilder ) | Adds a JsonObject from an object builder to the array at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:599 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.add ( int , JsonArrayBuilder ) | Adds a JsonArray from an array builder to the array at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:600 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.addAll ( JsonArrayBuilder ) | Adds all elements of the array in the specified array builder to the array. | true |  | true |
| JSONP:JAVADOC:601 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.addNull ( int ) | Adds a JsonValue#NULL value to the array at the specified position. Shifts the value currently at that position (if any) and any subsequent values to the right (adds one to their indices). Index starts with 0. | true |  | true |
| JSONP:JAVADOC:602 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.remove ( int ) | Remove the value in the array at the specified position. Shift any subsequent values to the left (subtracts one from their indices. | true |  | true |
| JSONP:JAVADOC:603 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , JsonValue ) | Replaces a value in the array with the specified value at the specified position. | true |  | true |
| JSONP:JAVADOC:604 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , String ) | Replaces a value in the array with the specified value as a JsonString at the specified position. | true |  | true |
| JSONP:JAVADOC:605 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , BigDecimal ) | Replaces a value in the array with the specified value as a JsonNumber at the specified position. | true |  | true |
| JSONP:JAVADOC:606 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , BigInteger ) | Replaces a value in the array with the specified value as a JsonNumber at the specified position. | true |  | true |
| JSONP:JAVADOC:607 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , int ) | Replaces a value in the array with the specified value as a JsonNumber at the specified position. | true |  | true |
| JSONP:JAVADOC:608 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , long ) | Replaces a value in the array with the specified value as a JsonNumber at the specified position. | true |  | true |
| JSONP:JAVADOC:609 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , double ) | Replaces a value in the array with the specified value as a JsonNumber at the specified position. | true |  | true |
| JSONP:JAVADOC:610 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , boolean ) | Replaces a value in the array with a JsonValue#TRUE or JsonValue#FALSE value at the specified position. | true |  | true |
| JSONP:JAVADOC:611 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , JsonObjectBuilder ) | Replaces a value in the array with the specified value as a JsonObject from an object builder at the specified position. | true |  | true |
| JSONP:JAVADOC:612 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.set ( int , JsonArrayBuilder ) | Replaces a value in the array with the specified value as a JsonArray from an array builder at the specified position. | true |  | true |
| JSONP:JAVADOC:613 | JsonArrayBuilder | jakarta.json.JsonArrayBuilder.setNull ( int ) | Replaces a value in the array with a JsonValue#NULL value at the specified position. | true |  | true |
| JSONP:JAVADOC:614 | JsonArrayBuilder | jakarta.json.JsonBuilderFactory.createArrayBuilder ( JsonArray ) | Creates a JsonArrayBuilder instance, initialized with an array. | true |  | true |
| JSONP:JAVADOC:615 | JsonObjectBuilder | jakarta.json.JsonBuilderFactory.createObjectBuilder ( JsonObject ) | Creates a JsonObjectBuilder instance, initialized with an object. | true |  | true |
| JSONP:JAVADOC:616 | JsonValue | jakarta.json.JsonMergePatch.apply ( JsonValue ) | Applies the JSON Merge Patch to the specified target. The target is not modified by the patch. | true |  | true |
| JSONP:JAVADOC:617 | JsonValue | jakarta.json.JsonMergePatch.toJsonValue | Returns the JsonMergePatch as JsonValue. | true |  | true |
| JSONP:JAVADOC:618 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.addAll ( JsonObjectBuilder ) | Adds all name/value pairs in the JSON object associated with the specified object builder to the JSON object associated with this object builder. The newly added name/value pair will replace any existing name/value pair with the same name. | true |  | true |
| JSONP:JAVADOC:619 | JsonObjectBuilder | jakarta.json.JsonObjectBuilder.remove ( String ) | Remove the name/value pair from the JSON object associated with this object builder if it is present. | true |  | true |
| JSONP:JAVADOC:620 | JsonStructure | jakarta.json.JsonPatch.apply ( JsonStructure ) | Applies the patch operations to the specified target. The target is not modified by the patch. | true |  | true |
| JSONP:JAVADOC:621 | JsonArray | jakarta.json.JsonPatch.toJsonArray | Returns the JsonPatch as JsonArray. | true |  | true |
| JSONP:JAVADOC:622 | Operation | jakarta.json.JsonPatch.Operation.fromOperationName ( String ) | Returns the enum constant with the specified name. | true |  | true |
| JSONP:JAVADOC:623 | String | jakarta.json.JsonPatch.Operation.operationName | Returns enum constant name as lower case string. | true |  | true |
| JSONP:JAVADOC:624 | Operation | jakarta.json.JsonPatch.Operation.valueOf ( String ) |  | true |  | true |
| JSONP:JAVADOC:625 | Operation[] | jakarta.json.JsonPatch.Operation.values |  | true |  | true |
| JSONP:JAVADOC:626 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.add ( String , JsonValue ) | Adds an "add" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:627 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.add ( String , String ) | Adds an "add" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:628 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.add ( String , int ) | Adds an "add" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:629 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.add ( String , boolean ) | Adds an "add" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:630 | JsonPatch | jakarta.json.JsonPatchBuilder.build | Returns the JSON Patch. | true |  | true |
| JSONP:JAVADOC:631 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.copy ( String , String ) | Adds a "copy" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:632 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.move ( String , String ) | Adds a "move" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:633 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.remove ( String ) | Adds a "remove" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:634 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.replace ( String , JsonValue ) | Adds a "replace" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:635 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.replace ( String , String ) | Adds a "replace" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:636 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.replace ( String , int ) | Adds a "replace" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:637 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.replace ( String , boolean ) | Adds a "replace" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:638 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.test ( String , JsonValue ) | Adds a "test" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:639 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.test ( String , String ) | Adds a "test" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:640 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.test ( String , int ) | Adds a "test" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:641 | JsonPatchBuilder | jakarta.json.JsonPatchBuilder.test ( String , boolean ) | Adds a "test" JSON Patch operation. | true |  | true |
| JSONP:JAVADOC:642 | JsonStructure | jakarta.json.JsonPointer.add ( JsonStructure , JsonValue ) | Adds or replaces a value at the referenced location in the specified target with the specified value. If the reference is the target (empty JSON Pointer string), the specified value, which must be the same type as specified target, is returned. If the reference is an array element, the specified value is inserted into the array, at the referenced index. The value currently at that location, and any subsequent values, are shifted to the right (adds one to the indices). Index starts with 0. If the reference is specified with a "-", or if the index is equal to the size of the array, the value is appended to the array. If the reference is a name/value pair of a JsonObject, and the referenced value exists, the value is replaced by the specified value. If the value does not exist, a new name/value pair is added to the object. | true |  | true |
| JSONP:JAVADOC:643 | JsonValue | jakarta.json.JsonPointer.getValue ( JsonStructure ) | Returns the value at the referenced location in the specified target. | true |  | true |
| JSONP:JAVADOC:644 | JsonStructure | jakarta.json.JsonPointer.remove ( JsonStructure ) | Removes the value at the reference location in the specified target. | true |  | true |
| JSONP:JAVADOC:645 | JsonStructure | jakarta.json.JsonPointer.replace ( JsonStructure , JsonValue ) | Replaces the value at the referenced location in the specified target with the specified value. | true |  | true |
| JSONP:JAVADOC:646 | JsonValue | jakarta.json.JsonReader.readValue | Returns a JSON value that is represented in the input source. This method needs to be called only once for a reader instance. | true |  | true |
| JSONP:JAVADOC:647 | JsonValue | jakarta.json.JsonStructure.getValue ( String ) | Get the value referenced by the provided JSON Pointer in the JsonStructure. | true |  | true |
| JSONP:JAVADOC:648 | JsonArray | jakarta.json.JsonValue.asJsonArray | Return the JsonValue as a JsonArray | true |  | true |
| JSONP:JAVADOC:649 | JsonObject | jakarta.json.JsonValue.asJsonObject | Return the JsonValue as a JsonObject | true |  | true |
| JSONP:JAVADOC:650 | void | jakarta.json.JsonWriter.write ( JsonValue ) | Writes the specified JsonValue to the output source. method needs to be called only once for a write instance. | true |  | true |
| JSONP:JAVADOC:651 | JsonArrayBuilder | jakarta.json.spi.JsonProvider.createArrayBuilder ( JsonArray ) | Creates a JSON array builder, initialized with the specified array. | true |  | true |
| JSONP:JAVADOC:652 | JsonArrayBuilder | jakarta.json.spi.JsonProvider.createArrayBuilder ( Collection ) | Creates a JSON array builder, initialized with the specified collection. | true |  | true |
| JSONP:JAVADOC:653 | JsonPatch | jakarta.json.spi.JsonProvider.createDiff ( JsonStructure , JsonStructure ) | Generates a JSON Patch (RFC 6902) from the source and target JsonStructure. The generated JSON Patch need not be unique. | true |  | true |
| JSONP:JAVADOC:654 | JsonMergePatch | jakarta.json.spi.JsonProvider.createMergeDiff ( JsonValue , JsonValue ) | Generates a JSON Merge Patch (RFC 7396) from the source and target JsonValues which when applied to the source, yields the target. | true |  | true |
| JSONP:JAVADOC:655 | JsonMergePatch | jakarta.json.spi.JsonProvider.createMergePatch ( JsonValue ) | Creates JSON Merge Patch (RFC 7396) from specified JsonValue. | true |  | true |
| JSONP:JAVADOC:656 | JsonObjectBuilder | jakarta.json.spi.JsonProvider.createObjectBuilder ( JsonObject ) | Creates a JSON object builder, initialized with the specified object. | true |  | true |
| JSONP:JAVADOC:657 | JsonObjectBuilder | jakarta.json.spi.JsonProvider.createObjectBuilder ( Map ) | Creates a JSON object builder, initialized with the specified Map. | true |  | true |
| JSONP:JAVADOC:658 | JsonPatch | jakarta.json.spi.JsonProvider.createPatch ( JsonArray ) | Creates a JSON Patch (RFC 6902) from the specified operations. | true |  | true |
| JSONP:JAVADOC:659 | JsonPatchBuilder | jakarta.json.spi.JsonProvider.createPatchBuilder | Creates a JSON Patch builder (RFC 6902). | true |  | true |
| JSONP:JAVADOC:660 | JsonPatchBuilder | jakarta.json.spi.JsonProvider.createPatchBuilder ( JsonArray ) | Creates a JSON Patch builder (RFC 6902), initialized with the specified operations. | true |  | true |
| JSONP:JAVADOC:661 | JsonPointer | jakarta.json.spi.JsonProvider.createPointer ( String ) | Creates JSON Pointer (RFC 6901) from given jsonPointer string. An empty jsonPointer string defines a reference to the target itself. If the jsonPointer string is non-empty, it must be a sequence of '/' prefixed tokens. | true |  | true |
| JSONP:JAVADOC:662 | JsonString | jakarta.json.spi.JsonProvider.createValue ( String ) | Creates a JsonString. | true |  | true |
| JSONP:JAVADOC:663 | JsonNumber | jakarta.json.spi.JsonProvider.createValue ( int ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:664 | JsonNumber | jakarta.json.spi.JsonProvider.createValue ( long ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:665 | JsonNumber | jakarta.json.spi.JsonProvider.createValue ( double ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:666 | JsonNumber | jakarta.json.spi.JsonProvider.createValue ( BigDecimal ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:667 | JsonNumber | jakarta.json.spi.JsonProvider.createValue ( BigInteger ) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:668 | Collector | jakarta.json.stream.JsonCollectors.groupingBy ( Function , Collector ) | Constructs a java.util.stream.Collector that implements a "group by" operation on the input JsonValue elements. A classifier function maps the input JsonValues to keys, and the JsonValues are partitioned into groups according to the value of the key. A reduction operation is performed on the JsonValues in each group, using the downstream Collector. For each group, the key and the results of the reduction operation become the name/value pairs of the resultant JsonObject. | true |  | true |
| JSONP:JAVADOC:669 | Collector | jakarta.json.stream.JsonCollectors.groupingBy ( Function ) | Constructs a java.util.stream.Collector that implements a "group by" operation on the input JsonValue elements. A classifier function maps the input JsonValues to keys, and the JsonValues are partitioned into groups according to the value of the key. The JsonValues in each group are added to a JsonArray. The key and the JsonArray in each group becomes the name/value pair of the resultant JsonObject. | true |  | true |
| JSONP:JAVADOC:670 | Collector | jakarta.json.stream.JsonCollectors.toJsonArray | Constructs a java.util.stream.Collector that accumulates the input JsonValue elements into a JsonArray. | true |  | true |
| JSONP:JAVADOC:671 | Collector | jakarta.json.stream.JsonCollectors.toJsonObject ( Function , Function ) | Constructs a java.util.stream.Collector that accumulates the input JsonValue elements into a JsonObject. The name/value pairs of the JsonObject are computed by applying the provided mapping functions. | true |  | true |
| JSONP:JAVADOC:672 | JsonGenerator | jakarta.json.stream.JsonGenerator.writeKey ( String ) | Writes the JSON name with a colon. It starts a field context, in which valid options are writing a value, starting an object or an array. Writing value closes field context, if object or array is started after field name, field context will be closed after object/array close. | true |  | true |
| JSONP:JAVADOC:673 | JsonArray | jakarta.json.stream.JsonParser.getArray | Returns a JsonArray and advance the parser to the the corresponding END_ARRAY. | true |  | true |
| JSONP:JAVADOC:674 | Stream | jakarta.json.stream.JsonParser.getArrayStream | Returns a stream of the JsonArray elements. The parser state must be START_ARRAY. The elements are read lazily, on an as-needed basis, as required by the stream operations. If the stream operations do not consume all of the array elements, skipArray can be used to skip the unprocessed array elements. | true |  | true |
| JSONP:JAVADOC:675 | JsonObject | jakarta.json.stream.JsonParser.getObject | Returns a JsonObject and advances the parser to the corresponding END_OBJECT. | true |  | true |
| JSONP:JAVADOC:676 | Stream | jakarta.json.stream.JsonParser.getObjectStream | Returns a stream of the JsonObject's name/value pairs. The parser state must be START_OBJECT. The name/value pairs are read lazily, on an as-needed basis, as required by the stream operations. If the stream operations do not consume all of the object's name/value pairs, skipObject can be used to skip the unprocessed elements. | true |  | true |
| JSONP:JAVADOC:677 | JsonValue | jakarta.json.stream.JsonParser.getValue | Returns a JsonValue at the current parser position. If the parser state is START_ARRAY, the behavior is the same as #getArray. If the parser state is START_OBJECT, the behavior is the same as #getObject. For all other cases, if applicable, the JSON value is read and returned. | true |  | true |
| JSONP:JAVADOC:678 | Stream | jakarta.json.stream.JsonParser.getValueStream | Returns a stream of JsonValue from a sequence of JSON values. The values are read lazily, on an as-needed basis, as needed by the stream operations. | true |  | true |
| JSONP:JAVADOC:679 | void | jakarta.json.stream.JsonParser.skipArray | Advance the parser to END_ARRAY. If the parser is in array context, i.e. it has previously encountered a START_ARRAY without encountering the corresponding END_ARRAY, the parser is advanced to the corresponding END_ARRAY. If the parser is not in any array context, nothing happens. | true |  | true |
| JSONP:JAVADOC:680 | void | jakarta.json.stream.JsonParser.skipObject | Advance the parser to END_OBJECT. If the parser is in object context, i.e. it has previously encountered a START_OBJECT without encountering the corresponding END_OBJECT, the parser is advanced to the corresponding END_OBJECT. If the parser is not in any object context, nothing happens. | true |  | true |
| JSONP:JAVADOC:681 | enum | jakarta.json.JsonConfig.KeyStrategy | Defines the different values allowed for KEY_STRATEGY. | true |  | true |
| JSONP:JAVADOC:682 | JsonNumber | jakarta.json.Json.createValue(Number value) | Creates a JsonNumber. | true |  | true |
| JSONP:JAVADOC:683 | Event | jakarta.json.stream.JsonParser.currentEvent | The event for the current parsing state. | true |  | true |
