spray.json.JsonParserSettings.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spray-json_2.11 Show documentation
Show all versions of spray-json_2.11 Show documentation
A Scala library for easy and idiomatic JSON (de)serialization
The newest version!
package spray.json
/**
* Allows to customize settings for the JSON parser.
*
* Use it like this:
*
* ```
* val customSettings =
* JsonParserSettings.default
* .withMaxDepth(100)
* .withMaxNumberCharacters(20)
*
* JsonParser(jsonString, customSettings)
* // or
* jsonString.parseJson(customSettings)
* ```
*/
sealed trait JsonParserSettings {
/**
* The JsonParser uses recursive decent parsing that keeps intermediate values on the stack. To prevent
* StackOverflowExceptions a limit is enforced on the depth of the parsed JSON structure.
*
* As a guideline we tested that one level of depth needs about 300 bytes of stack space.
*
* The default is a depth of 1000.
*/
def maxDepth: Int
/**
* Returns a copy of this settings object with the `maxDepth` setting changed to the new value.
*/
def withMaxDepth(newValue: Int): JsonParserSettings
/**
* The maximum number of characters the parser should support for numbers. This is restricted because creating
* `BigDecimal`s with high precision can be very slow (approx. quadratic runtime per amount of characters).
*/
def maxNumberCharacters: Int
/**
* Returns a copy of this settings object with the `maxNumberCharacters` setting changed to the new value.
*/
def withMaxNumberCharacters(newValue: Int): JsonParserSettings
}
object JsonParserSettings {
val default: JsonParserSettings = SettingsImpl()
private case class SettingsImpl(
maxDepth: Int = 1000,
maxNumberCharacters: Int = 100
) extends JsonParserSettings {
override def withMaxDepth(newValue: Int): JsonParserSettings = copy(maxDepth = newValue)
override def withMaxNumberCharacters(newValue: Int): JsonParserSettings = copy(maxNumberCharacters = newValue)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy