我正在尝试组织一个包含多个图层的复杂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;
}