Java> Подсчитать вхождение нуля и 0 в JSON Ответ - PullRequest
1 голос
/ 30 января 2020

У меня есть JSON ответ. Мне нужно посчитать значения, которые являются нулевыми, а затем значения, которые равны 0. JSON выглядит примерно так:

   {
      “stuffA“:{“a”: {“b”: 1.12343, “c”: “2019-01-29”, “d”: null } },
      ”stuffB”:{ "e":{}, "f":{}, "g":{}},
      ”stuffC”:[ {"h":{}},{"i":{}} ],
      ”stuffD”:[ {“j”:{}},{“k”:{}},{“l”:{}},{“m”:{}}],
    }

Я пытался преобразовать JSONObject в HashMap И искать частоту нуля, а затем 0, но не похоже на работу.

 map = (Map<String,Object>) gson.fromJson(json, map.getClass());
 int count1 = Collections.frequency(map.values(), null);
 int count2 = Collections.frequency(map.values(), 0);

Правильно ли я это делаю или есть более эффективный способ?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

сначала добавьте следующую зависимость к вашему pom. xml

<dependency>
    <groupId>com.github.wnameless.json</groupId>
    <artifactId>json-flattener</artifactId>
    <version>0.8.1</version>
</dependency>

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

public class Solution {
    public static void main(String[] args) {
        String json = "{\n" +
                "  \"stuffA\":{\"a\": {\"b\": 1.12343, \"c\": \"2019-01-29\", \"d\": null } },\n" +
                "  \"stuffB\":{ \"e\":{}, \"f\":{}, \"g\":{}},\n" +
                "  \"stuffC\":[ {\"h\":{}},{\"i\":{}} ],\n" +
                "  \"stuffD\":[ {\"j\":{}},{\"k\":{}},{\"l\":{}},{\"m\":{}}]\n" +
                "}";

        System.out.println(countZeroAndNull(json));
    }

    public static long countZeroAndNull(String json) {
        Map<String, Object> flattenJson = JsonFlattener.flattenAsMap(json);
        int count = 0;
        for (String s : flattenJson.keySet()) {
            if (flattenJson.get(s) == null) {
                count++;
            } else if (flattenJson.get(s) instanceof LinkedHashMap) {
                if (((LinkedHashMap) flattenJson.get(s)).size() < 1) {
                    count++;
                }
            }
        }
        return count;
    }
}

это ваш пример печатает 10 как вывод

0 голосов
/ 30 января 2020
boolean objectIsNull = yourJsonObject.isNull("stuffA");

вы можете попробовать это внутри для

...