public class JsonWriter extends Object implements Closeable, Flushable
JsonWriter.objectToJson(employee)
. This will
convert the passed in 'employee' instance into a JSON String.JsonWriter writer = new JsonWriter(stream); writer.write(employee); writer.close();This will write the 'employee' object to the passed in OutputStream.
That's it. This can be used as a debugging tool. Output an object
graph using the above code. Use the JsonWriter PRETTY_PRINT option to
format the JSON to be human-readable.
This will output any object graph deeply (or null). Object references are properly handled. For example, if you had A->B, B->C, and C->A, then A will be serialized with a B object in it, B will be serialized with a C object in it, and then C will be serialized with a reference to A (ref), not a redefinition of A.
Modifier and Type | Class and Description |
---|---|
static interface |
JsonWriter.JsonClassWriter
Implement this interface to customize the JSON output for a given class.
|
static interface |
JsonWriter.JsonClassWriterBase
Deprecated.
|
static interface |
JsonWriter.JsonClassWriterEx
Deprecated.
|
Modifier and Type | Field and Description |
---|---|
static String |
CLASSLOADER
If set, use the specified ClassLoader
|
static String |
CUSTOM_WRITER_MAP
If set, this maps class ==> CustomWriter
|
static String |
DATE_AS_TIMESTAMP
Constant for use as DATE_FORMAT value
|
static String |
DATE_FORMAT
Set the date format to use within the JSON output
|
static Set<String> |
EMPTY_SET |
static String |
ENUM_PUBLIC_ONLY
If set, indicates that private variables of ENUMs are not to be serialized
|
static String |
FIELD_NAME_BLACK_LIST
Set value to a Map
|
static String |
FIELD_SPECIFIERS
Set value to a Map
|
static String |
FORCE_MAP_FORMAT_ARRAY_KEYS_ITEMS
If set to true all maps are transferred to the format @keys[],@items[] regardless of the key_type
|
static String |
ISO_8601_FORMAT
Constant for use as DATE_FORMAT value
|
static String |
ISO_DATE_FORMAT
Constant for use as DATE_FORMAT value
|
static String |
ISO_DATE_TIME_FORMAT
Constant for use as DATE_FORMAT value
|
static String |
JSON_WRITER
Starting Arguments holds onto JsonWriter for custom writers using this argument
|
static String |
LOCAL_DATE_FORMAT
Set the local date format to use within the JSON output
|
static String |
NOT_CUSTOM_WRITER_MAP
If set, this maps class ==> CustomWriter
|
static String |
PRETTY_PRINT
Force nicely formatted JSON output
|
static String |
SHORT_META_KEYS
If set, then @type -> @t, @keys -> @k, @items -> @i
|
static String |
SKIP_NULL_FIELDS
If set, null fields are not written
|
static String |
TYPE
Force @type always
|
static String |
TYPE_NAME_MAP
If set, this map will be used when writing @type values - allows shorthand abbreviations type names
|
static String |
WRITE_ENUMS_AS_OBJECTS
If set, treats enums as object instead of writing them out as a single string.
|
static String |
WRITE_LONGS_AS_STRINGS
If set, longs are written in quotes (Javascript safe)
|
Constructor and Description |
---|
JsonWriter(OutputStream out) |
JsonWriter(OutputStream out,
Map<String,Object> optionalArgs) |
Modifier and Type | Method and Description |
---|---|
void |
addNotCustomWriter(Class<?> c)
For no custom writing to occur for the passed in Class.
|
static void |
addStaticallyInitializedClasses(Class<?> c)
Adds in Classes that are statically initialized with a possible sun.* class implementation beneath the
scenes.
|
void |
addWriter(Class<?> c,
JsonWriter.JsonClassWriter writer)
Add a custom writer which will manage writing objects of the
passed in Class in JSON format.
|
static void |
addWriterPermanent(Class<?> c,
JsonWriter.JsonClassWriter writer)
Add a permanent Customer Writer (Lifetime of JVM)
|
void |
close() |
static boolean |
ensureJsonPrimitiveKeys(Map map)
Ensure that all keys within the Map are String instances
|
void |
flush() |
static String |
formatJson(String json)
Format the passed in JSON string in a nice, human-readable format.
|
static String |
formatJson(String json,
Map readingArgs,
Map writingArgs)
Format the passed in JSON string in a nice, human-readable format.
|
protected String |
getSubstituteTypeName(String typeName)
Used internally to substitute type names.
|
protected String |
getSubstituteTypeNameIfExists(String typeName)
Used internally to substitute type names.
|
static boolean |
isAllowNanAndInfinity() |
void |
newLine()
Add newline (\n) to output
|
static String |
objectToJson(Object item) |
static String |
objectToJson(Object item,
Map<String,Object> optionalArgs)
Convert a Java Object to a JSON String.
|
static void |
setAllowNanAndInfinity(boolean lenient)
Set the writer to be out of RFC 4627: it will accept "NaN", "-Infinity" and "Infinity" values.
|
void |
tabIn()
Tab the output left (less indented)
|
void |
tabOut()
Tab the output right (more indented)
|
protected void |
traceFields(Deque<Object> stack,
Object obj,
Map<Class<?>,List<Field>> fieldSpecifiers)
Reach-ability trace to visit all objects within the graph to be written.
|
protected void |
traceReferences(Object root)
Walk object graph and visit each instance, following each field, each Collection, Map and so on.
|
void |
write(Object obj)
Write the passed in Java object in JSON format.
|
boolean |
writeArrayElementIfMatching(Class<?> arrayComponentClass,
Object o,
boolean showType,
Writer output)
Write the passed in array element to the JSON output, if any only if, there is a customer writer
for the class of the instance 'o'.
|
protected boolean |
writeCustom(Class<?> arrayComponentClass,
Object o,
boolean showType,
Writer output)
Perform the actual custom writing for an array element that has a custom writer.
|
void |
writeEnumSet(EnumSet<?> enumSet) |
boolean |
writeIfMatching(Object o,
boolean showType,
Writer output)
Write the passed in object (o) to the JSON output stream, if and only if, there is a custom
writer associated to the Class of object (o).
|
void |
writeImpl(Object obj,
boolean showType)
Main entry point (mostly used internally, but may be called from a Custom JSON writer).
|
void |
writeImpl(Object obj,
boolean showType,
boolean allowRef,
boolean allowCustom)
Main entry point (mostly used internally, but may be called from a Custom JSON writer).
|
static void |
writeJsonUtf8String(String s,
Writer output)
Write out special characters "\b, \f, \t, \n, \r", as such, backslash as \\
quote as \" and values less than an ASCII space (20hex) as "\\u00xx" format,
characters in the range of ASCII space to a '~' as ASCII, and anything higher in UTF-8.
|
void |
writeObject(Object obj,
boolean showType,
boolean bodyOnly) |
void |
writeObject(Object obj,
boolean showType,
boolean bodyOnly,
Set<String> fieldsToExclude) |
public static final String JSON_WRITER
public static final String CUSTOM_WRITER_MAP
public static final String NOT_CUSTOM_WRITER_MAP
public static final String DATE_FORMAT
public static final String LOCAL_DATE_FORMAT
public static final String DATE_AS_TIMESTAMP
public static final String ISO_DATE_FORMAT
public static final String ISO_DATE_TIME_FORMAT
public static final String ISO_8601_FORMAT
public static final String TYPE
public static final String PRETTY_PRINT
public static final String FIELD_SPECIFIERS
public static final String FIELD_NAME_BLACK_LIST
public static final String ENUM_PUBLIC_ONLY
public static final String WRITE_LONGS_AS_STRINGS
public static final String TYPE_NAME_MAP
public static final String SHORT_META_KEYS
public static final String SKIP_NULL_FIELDS
public static final String CLASSLOADER
public static final String WRITE_ENUMS_AS_OBJECTS
public static final String FORCE_MAP_FORMAT_ARRAY_KEYS_ITEMS
public JsonWriter(OutputStream out)
out
- OutputStream to which the JSON will be written.JsonWriter(OutputStream, Map)
public JsonWriter(OutputStream out, Map<String,Object> optionalArgs)
out
- OutputStream to which the JSON output will be written.optionalArgs
- (optional) Map of extra arguments indicating how dates are formatted,
what fields are written out (optional). For Date parameters, use the public static
DATE_TIME key, and then use the ISO_DATE or ISO_DATE_TIME indicators. Or you can specify
your own custom SimpleDateFormat String, or you can associate a SimpleDateFormat object,
in which case it will be used. This setting is for both java.util.Date and java.sql.Date.
If the DATE_FORMAT key is not used, then dates will be formatted as longs. This long can
be turned back into a date by using 'new Date(longValue)'.public static boolean isAllowNanAndInfinity()
public static void setAllowNanAndInfinity(boolean lenient)
lenient
- boolean true allows Nan and Infinity, -Infinity to be used within JSON.protected String getSubstituteTypeNameIfExists(String typeName)
typeName
- String name of type to substitute.protected String getSubstituteTypeName(String typeName)
typeName
- String name of type to substitute.public static String objectToJson(Object item)
item
- Object (root) to serialized to JSON String.objectToJson(Object, java.util.Map)
public static String objectToJson(Object item, Map<String,Object> optionalArgs)
item
- Object to convert to a JSON String.optionalArgs
- (optional) Map of extra arguments indicating how dates are formatted,
what fields are written out (optional). For Date parameters, use the public static
DATE_TIME key, and then use the ISO_DATE or ISO_DATE_TIME indicators. Or you can specify
your own custom SimpleDateFormat String, or you can associate a SimpleDateFormat object,
in which case it will be used. This setting is for both java.util.Date and java.sql.Date.
If the DATE_FORMAT key is not used, then dates will be formatted as longs. This long can
be turned back into a date by using 'new Date(longValue)'.public static String formatJson(String json)
json
- String input JSONpublic static String formatJson(String json, Map readingArgs, Map writingArgs)
json
- String input JSONreadingArgs
- (optional) Map of extra arguments for parsing json. Can be null.writingArgs
- (optional) Map of extra arguments for writing out json. Can be null.public void tabIn() throws IOException
IOException
public void newLine() throws IOException
IOException
public void tabOut() throws IOException
IOException
public boolean writeIfMatching(Object o, boolean showType, Writer output)
o
- Object to be (potentially written)showType
- boolean indicating whether to show @type.output
- Writer where the actual JSON is being written to.public boolean writeArrayElementIfMatching(Class<?> arrayComponentClass, Object o, boolean showType, Writer output)
arrayComponentClass
- Class type of the arrayo
- Object instance to writeshowType
- boolean indicating whether @type should be output.output
- Writer to write the JSON to (if there is a custom writer for o's Class).protected boolean writeCustom(Class<?> arrayComponentClass, Object o, boolean showType, Writer output) throws IOException
arrayComponentClass
- Class type of the arrayo
- Object instance to writeshowType
- boolean indicating whether @type should be output.output
- Writer to write the JSON to (if there is a custom writer for o's Class).IOException
public void addWriter(Class<?> c, JsonWriter.JsonClassWriter writer)
c
- Class to associate a custom JSON writer toowriter
- JsonClassWriter which implements the appropriate
subclass of JsonClassWriter.public static void addWriterPermanent(Class<?> c, JsonWriter.JsonClassWriter writer)
c
- Class to associate a custom JSON writer toowriter
- JsonClassWriter which implements the appropriate
subclass of JsonClassWriter.public void addNotCustomWriter(Class<?> c)
c
- Class which should NOT have any custom writer associated to it. Use this
to prevent a custom writer from being used due to inheritance.public static void addStaticallyInitializedClasses(Class<?> c)
c
- Class that has custom writer implementation and will never match declared field.public void write(Object obj)
obj
- Object any Java Object or JsonObject.protected void traceReferences(Object root)
root
- Object to be deeply traced. The objVisited and objsReferenced Maps will be written to
during the trace.protected void traceFields(Deque<Object> stack, Object obj, Map<Class<?>,List<Field>> fieldSpecifiers)
stack
- Deque used to manage descent into graph (rather than using Java stack.) This allows for
much larger graph processing.obj
- Object root of graphfieldSpecifiers
- Map of optional field specifiers, which are used to override the field list returned by
the JDK reflection operations. This allows a subset of the actual fields on an object to be serialized.public void writeImpl(Object obj, boolean showType) throws IOException
obj
- Object to be writtenshowType
- if set to true, the @type tag will be output. If false, it will be
dropped.IOException
- if one occurs on the underlying output stream.public void writeImpl(Object obj, boolean showType, boolean allowRef, boolean allowCustom) throws IOException
obj
- Object to be writtenshowType
- if set to true, the @type tag will be output. If false, it will beallowRef
- if set to true, @ref will be used, otherwise 2+ occurrence will be
output as full object.allowCustom
- if set to true, the object being called will be checked for a matching
custom writer to be used. This does not affect sub-objects, just the top-level 'obj'
being passed in.IOException
- if one occurs on the underlying output stream.public static boolean ensureJsonPrimitiveKeys(Map map)
map
- Map to inspect that all keys are primitive. This allows the output JSON
to be optimized into {"key1":value1, "key2": value2} format if all the
keys of the Map are Strings. If not, then a Map is written as two
arrays, a @keys array and an @items array. This allows support for Maps
with non-String keys.public void writeEnumSet(EnumSet<?> enumSet) throws IOException
IOException
public void writeObject(Object obj, boolean showType, boolean bodyOnly) throws IOException
obj
- Object to be written in JSON formatshowType
- boolean true means show the "@type" field, false
eliminates it. Many times the type can be dropped because it can be
inferred from the field or array type.bodyOnly
- write only the body of the objectIOException
- if an error occurs writing to the output stream.public void writeObject(Object obj, boolean showType, boolean bodyOnly, Set<String> fieldsToExclude) throws IOException
obj
- Object to be written in JSON formatshowType
- boolean true means show the "@type" field, false
eliminates it. Many times the type can be dropped because it can be
inferred from the field or array type.bodyOnly
- write only the body of the objectfieldsToExclude
- field that should be excluded when writing out object (per class bases for custom writers)IOException
- if an error occurs writing to the output stream.public static void writeJsonUtf8String(String s, Writer output) throws IOException
s
- String to be written in UTF-8 format on the output stream.output
- Writer to which the UTF-8 string will be written toIOException
- if an error occurs writing to the output stream.public void close()
close
in interface Closeable
close
in interface AutoCloseable
Copyright © 2023. All rights reserved.