Как проверить пустой элемент в json - PullRequest
1 голос
/ 21 апреля 2020

Есть ли в scala / java какой-либо способ оценить, не все ли элементы в JSON не пусты?

Я хотел бы иметь валидатор, чтобы в json не было элементов с пустыми значениями, такими как:

[{"elem1":"","elem2":"","elem3":"a"}]

Где первые два элемента пусты.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Полагаю, вам следует использовать функции библиотеки 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;
            }
        }
    }
0 голосов
/ 22 апреля 2020

Использование 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...