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