package simple.escp.data; import simple.escp.exception.InvalidPlaceholder; import javax.json.Json; import javax.json.JsonNumber; import javax.json.JsonObject; import javax.json.JsonReader; import javax.json.JsonString; import javax.json.JsonValue; import java.io.StringReader; public class CustomJsonDataSource implements DataSource { private String jsonString; private JsonObject json; public CustomJsonDataSource(String jsonString) { this.jsonString = jsonString; try (JsonReader reader = Json.createReader(new StringReader(jsonString))) { json = reader.readObject(); } } public CustomJsonDataSource(JsonObject jsonObject) { this.json = jsonObject; } @Override public boolean has(String s) { return json.containsKey(s); } @Override public Object get(String member) throws InvalidPlaceholder { JsonValue value = json.get(member); if (value.getValueType() == JsonValue.ValueType.ARRAY) { return value; } else if (value.getValueType() == JsonValue.ValueType.NUMBER) { return ((JsonNumber) value).bigDecimalValue(); } else if (value.getValueType() == JsonValue.ValueType.STRING) { return ((JsonString) value).getString(); } else { return value.toString(); } } @Override public Object getSource() { return jsonString; } @Override public String[] getMembers() { return json.keySet().toArray(new String[0]); } }