
com.electronwill.nightconfig.json.MinimalJsonWriter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of json_android Show documentation
Show all versions of json_android Show documentation
Powerful, easy-to-use and multi-language configuration library for the JVM - json_android module
package com.electronwill.nightconfig.json;
import com.electronwill.nightconfig.core.UnmodifiableConfig;
import com.electronwill.nightconfig.core.io.*;
import java.io.Writer;
import java.util.*;
import static com.electronwill.nightconfig.core.NullObject.NULL_OBJECT;
/**
* A simple JSON writer that produces a minimized output: no line breaks, no spaces, no indentation.
* Use the {@link FancyJsonWriter} if you want a nicer output.
*
* @author TheElectronWill
*/
public final class MinimalJsonWriter implements ConfigWriter {
static final char[] NULL_CHARS = {'n', 'u', 'l', 'l'};
static final char[] TRUE_CHARS = {'t', 'r', 'u', 'e'};
static final char[] FALSE_CHARS = {'f', 'a', 'l', 's', 'e'};
static final char[] TO_ESCAPE = {'"', '\n', '\r', '\t', '\\'};
static final char[] ESCAPED = {'"', 'n', 'r', 't', '\\'};
static final char[] EMPTY_OBJECT = {'{', '}'}, EMPTY_ARRAY = {'[', ']'};
/**
* Writes a configuration in the JSON object format.
*/
@Override
public void write(UnmodifiableConfig config, Writer writer) {
writeConfig(config, new WriterOutput(writer));
}
/**
* Writes a Collection in the JSON array format.
*/
public void writeCollection(Collection> collection, Writer writer) {
writeCollection(collection, new WriterOutput(writer));
}
/**
* Writes a String in the JSON string format.
*/
public void writeString(CharSequence csq, Writer writer) {
writeString(csq, new WriterOutput(writer));
}
/**
* Writes a value in the JSON format.
*/
public void writeValue(Object value, Writer writer) {
writeValue(value, new WriterOutput(writer));
}
private void writeConfig(UnmodifiableConfig config, CharacterOutput output) {
if (config.isEmpty()) {
output.write(EMPTY_OBJECT);
return;
}
Iterator> it = config.valueMap().entrySet().iterator();
output.write('{');
while (true) {
final Map.Entry entry = it.next();
final String key = entry.getKey();
final Object value = entry.getValue();
writeString(key, output);// key
output.write(':');// separator
writeValue(value, output);// value
if (it.hasNext()) {
output.write(',');
} else {
break;
}
}
output.write('}');
}
private void writeValue(Object v, CharacterOutput output) {
if (v == null || v == NULL_OBJECT) {
output.write(NULL_CHARS);
} else if (v instanceof CharSequence) {
writeString((CharSequence)v, output);
} else if (v instanceof Enum) {
writeString(((Enum>)v).name(), output);
} else if (v instanceof Number) {
output.write(v.toString());
} else if (v instanceof UnmodifiableConfig) {
writeConfig((UnmodifiableConfig)v, output);
} else if (v instanceof Collection) {
writeCollection((Collection>)v, output);
} else if (v instanceof Boolean) {
writeBoolean((boolean)v, output);
} else if (v instanceof Object[]) {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy