mirror of
https://github.com/stleary/JSON-java.git
synced 2026-01-24 00:03:17 -05:00
153 lines
6.0 KiB
Java
153 lines
6.0 KiB
Java
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
|
|
* <p>
|
|
* 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.
|
|
* <p>
|
|
* 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 <code>overwriteDuplicateKey</code> 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 (<code>isUseNativeNulls() == true</code>)
|
|
* or ignore that map entry (<code>isUseNativeNulls() == false</code>).
|
|
*
|
|
* @return The <code>useNativeNulls</code> 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;
|
|
}
|
|
}
|