Есть ли в scala / java какой-либо способ оценить, не все ли элементы в JSON не пусты?
Я хотел бы иметь валидатор, чтобы в json не было элементов с пустыми значениями, такими как:
[{"elem1":"","elem2":"","elem3":"a"}]
Где первые два элемента пусты.
Полагаю, вам следует использовать функции библиотеки JSON, которую вы используете. Даже если библиотека не предоставляет соответствующих параметров проверки, вы можете выполнить проверку вручную с помощью библиотеки JSON tokenizer. Просто иллюстрация с использованием крошечного JSON парсера https://github.com/anatolygudkov/green-jelly:
public class ValidateMyJson { private static final String myJson = "[{\"elem1\":\"\",\"elem2\":\"\",\"elem3\":\"a\"}]"; public static void main(String[] args) { final NoEmptyValueValidation noEmptyValueValidation = new NoEmptyValueValidation(); final JsonParser parser = new JsonParser(); parser.setListener(noEmptyValueValidation); parser.parse(myJson); parser.eoj(); System.out.println("No empty value validation passed: " + noEmptyValueValidation.isPassed()); } public static class NoEmptyValueValidation extends JsonParserListenerAdaptor { private boolean passed = true; @Override public boolean onStringValue(final CharSequence data) { if (data.length() == 0) { passed = false; } return true; } public boolean isPassed() { return passed; } } }
Использование Play JSON:
import play.api.libs.json._ def hasEmptyValue(json: JsValue): Boolean = { json match { case _: JsBoolean => false case _: JsNull => false // could also be true, depending on your definition case _: JsNumber => false case JsArray(jsons) => if (jsons.nonEmpty) jsons.filter(isEmptyJson).nonEmpty else true case JsObject(kvs) => if (kvs.nonEmpty) kvs.values.filter(isEmptyJson).nonEmpty else true def jsonStringHasEmptyValue(str: String): Boolean = hasEmptyValue(Json.parse(str))