В моем приложении для Android я должен объединить две разные структуры json, загруженные из двух разных API, с модификацией.Эти структуры json составлены из другого дерева json.
В настоящее время я храню результаты этих двух API в двух разных свойствах ObjectNode и в двух разных файлах на диске, я беру два объекта ObjectNode и передаю их этому методу:
public JsonNode merge(JsonNode dst, JsonNode jsonToMerge) {
JsonNode node;
Iterator<String> fieldNames = dst.fieldNames();
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
node = dst.get(fieldName);
if (jsonToMerge != null && jsonToMerge.has(fieldName)) {
Iterator<Map.Entry<String, JsonNode>> singleKey =
jsonToMerge.get(fieldName).fields();
while (singleKey.hasNext()) {
Map.Entry<String, JsonNode> entry =
singleKey.next();
if (node.isArray()) {
//noinspection ConstantConditions
((ArrayNode)
node).set(Integer.valueOf(entry.getKey()), entry.getValue());
} else {
//noinspection ConstantConditions
((ObjectNode) node).set(entry.getKey(),
entry.getValue());
}
}
}
}
if (jsonToMerge != null) {
fieldNames = jsonToMerge.fieldNames();
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
JsonNode temp = jsonToMerge.get(fieldName);
if (!dst.has(fieldName)) {
((ObjectNode) dst).set(fieldName, temp);
}
}
}
return dst;
}
К сожалению, этот процесс массово использует ram, и gc часто запускается.Как я могу оптимизировать этот процесс слияния?У вас есть предложение?