【问题标题】:Convert a Map into JSON将地图转换为 JSON
【发布时间】:2017-02-14 21:18:25
【问题描述】:

我知道以前有人问过这个问题,但这有点不同,我的地图如下所示:

key                       value
a.b.c                       1
a.b.d                       2
e.f                         3

生成的 JSON 如下所示:

{
"a": {
    "b": {
        "c": 1,
        "d": 2
    }
},
"e": {
    "f": 3}
}

如果有一些库可以解决这个问题,那就完美了。

编辑:修复了生成的 JSON 中的错误

【问题讨论】:

  • 我不明白想要的结果和初始映射之间的逻辑,请解释一下。
  • 地图的键代表字段,所以a.b.c表示字段“a”有一个字段“b”,其中有一个字段“c”,c的值为1
  • 那么当地图有a.b.d 时,为什么在想要的结果中"d""a" 之下? a.b.d.g 去哪儿了?
  • 现在您的 JSON 无效,并且仍然没有 a.b.d.g。请不要急于提出问题,慢慢来。

标签: java json


【解决方案1】:

给你:

    Map<String, Integer> myMap = new HashMap<>();
    myMap.put("a.b.c", 1);
    myMap.put("a.b.d", 2);
    myMap.put("e.f", 3);

    JSONObject output = new JSONObject();
    for (String key : myMap.keySet()) {
        String[] parts = key.split("\\.");
        Integer value = myMap.get(key);

        JSONObject currentPointer = output;
        for (int i = 0; i < parts.length; i++) {
            String part = parts[i];
            boolean isLeaf = i == parts.length - 1;
            if (currentPointer.keySet().contains(part)) {
                currentPointer = (JSONObject) currentPointer.get(part);
            } else {
                if (isLeaf) {
                    currentPointer.put(part, value);
                } else {
                    JSONObject newNode = new JSONObject();
                    currentPointer.put(part, newNode);
                    currentPointer = newNode;
                }
            }
        }
    }
    return output.toJSONString();

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2017-03-22
    相关资源
    最近更新 更多