Provide easy to use mechanisms like toString() and constructor (factory method) to convert Java to JSON and vice-versa
Allow pre-existing unmodifiable objects to be converted to and from JSON
Allow custom representations for objects
Support arbitrarily complex objects
Generate compact and readability JSON output