package org.json; /** * Configuration object for the JSON parser. The configuration is immutable. */ public class JSONParserConfiguration extends ParserConfiguration { /** * Used to indicate whether to overwrite duplicate key or not. */ private boolean overwriteDuplicateKey; /** * Used to indicate whether to convert java null values to JSONObject.NULL or ignoring the entry when converting java maps. */ private boolean useNativeNulls; /** * Configuration with the default values. */ public JSONParserConfiguration() { super(); this.overwriteDuplicateKey = false; // DO NOT DELETE THE FOLLOWING LINE -- it is used for strictMode testing // this.strictMode = true; } /** * This flag, when set to true, instructs the parser to enforce strict mode when parsing JSON text. * Garbage chars at the end of the doc, unquoted string, and single-quoted strings are all disallowed. */ private boolean strictMode; @Override protected JSONParserConfiguration clone() { JSONParserConfiguration clone = new JSONParserConfiguration(); clone.overwriteDuplicateKey = overwriteDuplicateKey; clone.strictMode = strictMode; clone.maxNestingDepth = maxNestingDepth; clone.keepStrings = keepStrings; clone.useNativeNulls = useNativeNulls; return clone; } /** * Defines the maximum nesting depth that the parser will descend before throwing an exception * when parsing a map into JSONObject or parsing a {@link java.util.Collection} instance into * JSONArray. The default max nesting depth is 512, which means the parser will throw a JsonException * if the maximum depth is reached. * * @param maxNestingDepth the maximum nesting depth allowed to the JSON parser * @return The existing configuration will not be modified. A new configuration is returned. */ @SuppressWarnings("unchecked") @Override public JSONParserConfiguration withMaxNestingDepth(final int maxNestingDepth) { JSONParserConfiguration clone = this.clone(); clone.maxNestingDepth = maxNestingDepth; return clone; } /** * Controls the parser's behavior when meeting duplicate keys. * If set to false, the parser will throw a JSONException when meeting a duplicate key. * Or the duplicate key's value will be overwritten. * * @param overwriteDuplicateKey defines should the parser overwrite duplicate keys. * @return The existing configuration will not be modified. A new configuration is returned. */ public JSONParserConfiguration withOverwriteDuplicateKey(final boolean overwriteDuplicateKey) { JSONParserConfiguration clone = this.clone(); clone.overwriteDuplicateKey = overwriteDuplicateKey; return clone; } /** * Controls the parser's behavior when meeting Java null values while converting maps. * If set to true, the parser will put a JSONObject.NULL into the resulting JSONObject. * Or the map entry will be ignored. * * @param useNativeNulls defines if the parser should convert null values in Java maps * @return The existing configuration will not be modified. A new configuration is returned. */ public JSONParserConfiguration withUseNativeNulls(final boolean useNativeNulls) { JSONParserConfiguration clone = this.clone(); clone.useNativeNulls = useNativeNulls; return clone; } /** * Sets the strict mode configuration for the JSON parser with default true value *
* When strict mode is enabled, the parser will throw a JSONException if it encounters an invalid character * immediately following the final ']' character in the input. This is useful for ensuring strict adherence to the * JSON syntax, as any characters after the final closing bracket of a JSON array are considered invalid. * @return a new JSONParserConfiguration instance with the updated strict mode setting */ public JSONParserConfiguration withStrictMode() { return withStrictMode(true); } /** * Sets the strict mode configuration for the JSON parser. *
* When strict mode is enabled, the parser will throw a JSONException if it encounters an invalid character
* immediately following the final ']' character in the input. This is useful for ensuring strict adherence to the
* JSON syntax, as any characters after the final closing bracket of a JSON array are considered invalid.
*
* @param mode a boolean value indicating whether strict mode should be enabled or not
* @return a new JSONParserConfiguration instance with the updated strict mode setting
*/
public JSONParserConfiguration withStrictMode(final boolean mode) {
JSONParserConfiguration clone = this.clone();
clone.strictMode = mode;
return clone;
}
/**
* The parser's behavior when meeting duplicate keys, controls whether the parser should
* overwrite duplicate keys or not.
*
* @return The overwriteDuplicateKey configuration value.
*/
public boolean isOverwriteDuplicateKey() {
return this.overwriteDuplicateKey;
}
/**
* The parser's behavior when meeting a null value in a java map, controls whether the parser should
* write a JSON entry with a null value (isUseNativeNulls() == true)
* or ignore that map entry (isUseNativeNulls() == false).
*
* @return The useNativeNulls configuration value.
*/
public boolean isUseNativeNulls() {
return this.useNativeNulls;
}
/**
* The parser throws an Exception when strict mode is true and tries to parse invalid JSON characters.
* Otherwise, the parser is more relaxed and might tolerate some invalid characters.
*
* @return the current strict mode setting.
*/
public boolean isStrictMode() {
return this.strictMode;
}
}