Files
Condominio_SeConectai/src/main/java/com/seconectai/condocontab/util/Json.java
T
2026-09-29 12:12:31 -03:00

66 lines
2.1 KiB
Java

package com.seconectai.condocontab.util;
import java.time.temporal.TemporalAccessor;
import java.util.Iterator;
import java.util.Map;
public final class Json {
private Json() {
}
public static String write(Object value) {
return value(value);
}
private static String value(Object value) {
if (value == null) {
return "null";
}
if (value instanceof Number || value instanceof Boolean) {
return String.valueOf(value);
}
if (value instanceof TemporalAccessor) {
return quote(String.valueOf(value));
}
if (value instanceof Map<?, ?> map) {
StringBuilder json = new StringBuilder("{");
Iterator<? extends Map.Entry<?, ?>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<?, ?> entry = iterator.next();
json.append(quote(String.valueOf(entry.getKey()))).append(":").append(value(entry.getValue()));
if (iterator.hasNext()) {
json.append(",");
}
}
return json.append("}").toString();
}
if (value instanceof Iterable<?> iterable) {
StringBuilder json = new StringBuilder("[");
Iterator<?> iterator = iterable.iterator();
while (iterator.hasNext()) {
json.append(value(iterator.next()));
if (iterator.hasNext()) {
json.append(",");
}
}
return json.append("]").toString();
}
return quote(String.valueOf(value));
}
private static String quote(String text) {
StringBuilder out = new StringBuilder("\"");
for (char c : text.toCharArray()) {
switch (c) {
case '"' -> out.append("\\\"");
case '\\' -> out.append("\\\\");
case '\n' -> out.append("\\n");
case '\r' -> out.append("\\r");
case '\t' -> out.append("\\t");
default -> out.append(c);
}
}
return out.append("\"").toString();
}
}