How to check empty element in json

╄→尐↘猪︶ㄣ 提交于 2021-01-29 02:05:54

问题


Is there any way in scala/java to evaluate if all items in a JSON are not empty?

I would like to have a validator, avoiding to have items in a json with empty values like:

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

Where the first two elements are empty.


回答1:


Using 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))



回答2:


I suppose you should use features of a JSON library you use. Even if the library doesn't provide appropriate validation options, you can implement the validation manually with library's JSON tokenizer. Just an illustration using a tiny JSON parser 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;
            }
        }
    }


来源:https://stackoverflow.com/questions/61350063/how-to-check-empty-element-in-json

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!