public class JsonBuilder
extends java.lang.Object
There are other utilities for this but they seem over-engineered. This just gets a generic Map/List/String model through JSON. If you want to reflectively serialize arbitrary Java classes then use something else.
Dates are rendered as strings, but they do not parse back as dates. The "secrets" list was added to automatically obfuscate map keys that typically contain passwords. This is necessary since this is almost always used to serialize objects for debug logging, and seeing passwords in the log raises all sorts of alarms.
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DATE_FORMAT
Date format we render.
|
static boolean |
SortMapKeys
A global flag controlling whether we sort map keys before
rendering.
|
| Constructor and Description |
|---|
JsonBuilder() |
| Modifier and Type | Method and Description |
|---|---|
void |
add(java.lang.String literal) |
void |
add(java.lang.String name,
java.lang.Object value) |
void |
addSecret(java.lang.String s) |
void |
addSecrets(java.lang.String[] secrets) |
void |
end() |
void |
endArray() |
boolean |
isSecret(java.lang.String name) |
static java.lang.String |
render(java.lang.Object o)
Public interface to rendering something as a JSON string.
|
void |
reset() |
void |
start() |
void |
start(java.lang.String name) |
void |
startArray() |
java.lang.String |
toString() |
public static boolean SortMapKeys
It probably would not hurt to leave this on all the time, we should not have many large maps?
public static final java.lang.String DATE_FORMAT
public void addSecret(java.lang.String s)
public void addSecrets(java.lang.String[] secrets)
public boolean isSecret(java.lang.String name)
public void reset()
public void start()
public void end()
public void start(java.lang.String name)
public void startArray()
public void endArray()
public void add(java.lang.String name,
java.lang.Object value)
public void add(java.lang.String literal)
public java.lang.String toString()
toString in class java.lang.Objectpublic static java.lang.String render(java.lang.Object o)
For debugging it is important that we render as much as we can so this does not throw exceptions if it counters something it does not understand.
The static interface is convenient, but if you need to set options like the Secrets list, you have to construct one and use the interface methods above.