
dev.harrel.jsonschema.providers.JsonSmartNode Maven / Gradle / Ivy
package dev.harrel.jsonschema.providers;
import dev.harrel.jsonschema.JsonNode;
import dev.harrel.jsonschema.JsonNodeFactory;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
import net.minidev.json.parser.JSONParser;
import net.minidev.json.parser.ParseException;
import java.util.*;
import static net.minidev.json.parser.JSONParser.MODE_JSON_SIMPLE;
public final class JsonSmartNode extends SimpleJsonNode {
private JsonSmartNode(Object node, String jsonPointer) {
super(node, jsonPointer);
}
public JsonSmartNode(Object node) {
this(node, "");
}
@Override
public boolean asBoolean() {
return (Boolean) node;
}
@Override
public String asString() {
return String.valueOf(node);
}
@Override
List createArray() {
JSONArray jsonArray = (JSONArray) node;
List result = new ArrayList<>(jsonArray.size());
for (int i = 0; i < jsonArray.size(); i++) {
result.add(new JsonSmartNode(jsonArray.get(i), jsonPointer + "/" + i));
}
return result;
}
@Override
Map createObject() {
Set> objectMap = ((JSONObject) node).entrySet();
Map result = MapUtil.newHashMap(objectMap.size());
for (Map.Entry entry : objectMap) {
result.put(entry.getKey(), new JsonSmartNode(entry.getValue(), jsonPointer + "/" + JsonNode.encodeJsonPointer(entry.getKey())));
}
return result;
}
@Override
boolean isNull(Object node) {
return node == null;
}
@Override
boolean isArray(Object node) {
return node instanceof JSONArray;
}
@Override
boolean isObject(Object node) {
return node instanceof JSONObject;
}
public static final class Factory implements JsonNodeFactory {
private final JSONParser parser;
public Factory() {
this(new JSONParser(MODE_JSON_SIMPLE));
}
public Factory(JSONParser parser) {
this.parser = parser;
}
@Override
public JsonSmartNode wrap(Object node) {
if (node instanceof JsonSmartNode) {
return new JsonSmartNode(((JsonSmartNode) node).node);
} else {
return new JsonSmartNode(node);
}
}
@Override
public JsonSmartNode create(String rawJson) {
try {
return new JsonSmartNode(parser.parse(rawJson));
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy