Feature List
The following is a list of the most notable features available in Json-lib.
Java
The following options are configurable with JsonConfig:
- bidirectional serialization, supports Maps, Collections, arrays (primitives, multidimensional), beans, DynaBeans, Enums & Annotations (jdk15 package only)
- supports custom serialization with 3 schemes:
- the bean implements JSONString interface
- register a JsonBeanProcessor for the whole bean
- register a JsonValueProcessor for a bean property (key and/or type)
- register a DefaultValueProcessor for returning a default value when a null reference is encountered
- plugin your own strategy for selecting a JsonBeanProcessor with JsonBeanProcessorMatcher
- plugin your own strategy for selecting a DefaultValueProcessor with DefaultValueProcessorMatcher
- modify the target property name when transforming from JSON to Java if the name is not a valid JavaIdentifier
- skip modifying map keys when transforming form JSON to Java if the key is not a valid JavaIdentifier
- register your own JavaIdentifierTransformer strategy
- plugin your own strategy for setting properties into a bean when transforming from JSON to Java thanks to PropertySetStrategy
- publish events when building a JSONObject or JSONarray. The available events are:
- object start/end
- array start/end
- propertySet
- elementAdded
- warning (recoverable)
- error (exception)
- Cycle detection, there are two default strategies (default throws an exception), you can register your own
- Skip transient fields when serailizing to JSON (default=don't skip)
- Skip JAP @Transient annotated methods when serailizing to JSON (default=don't skip)
- Exclude bean properties and/or map keys when serailizing to JSON (default=['class','metaClass','declaringClass'])
- Filters provide a finer detail for excluding/including properties when serializing to JSON or transforming back to Java
- plugin your own strategy for instatiating beans if they do now follow the no-args constructor rule
- default JavaBean instantiton strategy accepts package protected and private no-args constructor (Hibernate friendly)
- JSONObject implements java.util.Map and java.util.Comparable
- JSONArray implements java.util.List and java.util.Comparable
- JSONObject, JSONArray and JSONNull implement a base interface: JSON
- JSONAssert, a test-friendly class for testing JSON values
XML
The following options are configurable in XMLSerializer:
- [read] trim leading and trailing whitespace from element values
- [read] skip namespace handling
- [read] trim namespace prefixes
- [write] skip reading type hints (useful for converting back to JSON)
- [write] write type hints (useful for converting back to JSON)
- [write] skip writing type hints (useful for converting back to JSON)
- [write] change default values for Object, Array and Element tag names
- [write] change default value for Root element tag name
- [write] raise error if namespace uri is missing
- [write] transform an explicit array into an implicit array
Web
The following options are configurable in WebUtils:
- do not output quotes for object keys when its safe for JavaScript
- two default strategies for preventing javascript hijacking, you can register your own
Groovy
- support for the leftshift ( << ) operator in JSONObject
- support for the spaceship ( <=> ) and its cousins
- type conversion with the
as
keyword
- a Groovy JSON builder
JRuby
- JSONArray.empty? is an alias for JSONArray.isEmpty()
- JSONObject.empty? is an alias for JSONObject.isEmpty()
- support for the leftshift ( << ) operator in JSONObject