in src/main/java/org/apache/sling/servlets/get/impl/util/JsonObjectCreator.java [113:181]
private JsonValue getValue(Object value) {
if (value instanceof Supplier) {
return getValue(((Supplier) value).get());
}
if (value == null) {
return Json.createValue("");
}
if (value instanceof InputStream) {
// input stream is already handled
return Json.createValue(0);
} else if (value instanceof Calendar) {
if (ecmaSupport) {
return Json.createValue(JsonObjectCreator.formatEcma((Calendar) value));
} else {
return Json.createValue(ISO8601.format(((Calendar) value)));
}
} else if (value instanceof Boolean) {
final Boolean bool = (Boolean) value;
return bool ? JsonValue.TRUE : JsonValue.FALSE;
} else if (value instanceof Long) {
return Json.createValue((Long) value);
} else if (value instanceof Double) {
return Json.createValue((Double) value);
} else if (value instanceof String) {
return Json.createValue((String) value);
} else if (value instanceof Integer) {
return Json.createValue((Integer) value);
} else if (value instanceof Short) {
return Json.createValue((Short) value);
} else if (value instanceof Byte) {
return Json.createValue((Byte) value);
} else if (value instanceof Float) {
return Json.createValue((Float) value);
} else if (value instanceof Map) {
final JsonObjectBuilder builder = Json.createObjectBuilder();
for (final Map.Entry<Object, Object> entry : ((Map<Object, Object>) value).entrySet()) {
final JsonValue v = getValue(entry.getValue());
builder.add(entry.getKey().toString(), v);
}
return builder.build();
} else if (value instanceof Collection) {
final JsonArrayBuilder builder = Json.createArrayBuilder();
for (final Object obj : (Collection) value) {
builder.add(getValue(obj));
}
return builder.build();
} else if (value.getClass().isArray()) {
final JsonArrayBuilder builder = Json.createArrayBuilder();
for (int i = 0; i < Array.getLength(value); i++) {
builder.add(getValue(Array.get(value, i)));
}
return builder.build();
}
return Json.createValue(value.toString());
}