在Jackson与两个复杂json的合并过程中优化ram使用

时间:2019-01-18 17:50:32

标签: java android json performance jackson2

在我的android应用中,我必须合并从两个不同的api下载的两个不同的json结构,并进行改型。该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经常被触发。 如何优化此合并过程?你有建议吗?

0 个答案:

没有答案