在java 8中将多层json转换为单层json

时间:2017-11-07 15:20:52

标签: java json java-stream

我正在尝试组织一个包含多个图层的复杂json配置文件,以便可以在代码中轻松读取。

所以我想转换这样的东西:

{
  "rootProp": {
    "a": 1,
    "moreObj": {
      "b": "beta"
    }
  }
}

{
  "rootProp.a": 1,
  "rootProp.moreObj.b": "beta"
}

我有一个递归版本,但我很好奇是否可以使用流或某些库来完成。

public JsonObject flattenJson(JsonObject jsonObject) {
    return flattenJson(jsonObject, "");
}

public JsonObject flattenJson(JsonObject jsonObject, String prefix) {
    JsonObject result = new JsonObject();

    jsonObject
            .forEach(entry -> {
                if (entry.getValue() instanceof JsonArray) {
                    throw new RuntimeException("Config shouldn't contain arrays");
                }
                if (entry.getValue() instanceof JsonObject) {
                    JsonObject value = (JsonObject) entry.getValue();
                    JsonObject flat = flattenJson(value, entry.getKey() + ".");
                    flat
                            .stream()
                            .forEach(flattenedEntry -> {
                                String key = prefix + flattenedEntry.getKey();
                                result.put(key, flattenedEntry.getValue());
                            });
                } else {
                    String keyName = prefix + entry.getKey();
                    result.put(keyName, entry.getValue());
                }
            });
    return result;
}

0 个答案:

没有答案