【问题标题】:Java > Count occurrence of null and 0 in JSON ResponseJava > 在 JSON 响应中计算 null 和 0 的出现次数
【发布时间】:2020-05-15 15:12:49
【问题描述】:

我有一个 JSON 响应。我需要计算 null 的值,然后计算 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 并查找 null 然后为 0 的频率,但似乎不起作用。

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

我是正确地解决这个问题还是有更有效的方法?

【问题讨论】:

  • 请展示一个具有 null 和 0 值的 json 示例。另外,分享您的尝试。
  • 已更新。如果需要更多信息,请告诉我。
  • 您的 json 无效,例如在 json 中我们不能有这样的“stuffB”:{ {},{},{},{} } 结构
  • @SaeedAlizadeh 我更新了 json 结构

标签: java json hashmap gson


【解决方案1】:

首先将以下依赖项添加到您的 pom.xml

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

首先我将 json 转换为平面地图对象,然后计算 null 和空对象的数量:

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 打印为输出

【讨论】:

    【解决方案2】:
    boolean objectIsNull = yourJsonObject.isNull("stuffA");
    

    你可以在 for 里面试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2019-03-02
      • 2019-08-23
      • 2017-03-24
      • 2015-06-19
      • 2017-02-13
      • 1970-01-01
      相关资源
      最近更新 更多