【问题标题】:Best practices of nested loop嵌套循环的最佳实践
【发布时间】:2019-03-16 18:46:06
【问题描述】:

我正在读取大型 Json 文件,我想将这些对象映射到文件中并将它们插入到数据库中

Json 结构

{

"A": [
    {
        "key1": "value1",
        "key2": "value2",
        "B": [
            {
                "id": "34f852c8-fc51-47aa-ba7f-dd659a4bff3f",
                "C": [
                    {
                        "c1": "819685-002",

                    }
                ]
            }
        ]
    },

    {
        "key1": "value1",
        "key2": "value2",
        "B": [
            {
                "id": "34f852c8-fc51-47aa-ba7f-dd659a4bff3f",
                "C": [
                    {
                        "c1": "819685-002",

                    }
                ]
            }
        ]
    }
]
}

文件包含多个A块

所以我需要循环三个嵌套循环

For (A){
    for (B){
       FOR (C) {
          // CREATE THE AN OBJECT 
       }
     }
 }

 // Then after the loop insert all objects once
 db.bulk(//List of object created);

插入2557条记录需要3分钟的问题?

可以做任何增强来增强循环过程吗?

【问题讨论】:

  • 时间去哪儿了,创建对象列表还是 db.bulk?
  • 为什么不使用 JSON 映射,例如 Jackson
  • 同意维克多。您可以为您的汽车制作自己的车轮,但购买它们会更有效。 (也就是不要重新发明轮子。)
  • @VictorGubin,关键是 Json 对象中的新对象结构不同这就是为什么我必须循环进入它们
  • @TonyHopkinson,循环和插入记录

标签: java cloudant


【解决方案1】:

我总是会创建模型来将 json 字符串映射到 POJO,以便我可以灵活地对它们进行操作。例如,对于您的 json 部分,我将 POJO 创建为:

class Payload {
    private List<Result> A;

    // getters and setters
}


class Result {
    private String key1;
    private String key2;
    private List<Result2> B;

    // getters and setters
}

现在您可以使用 Jackson 将您的 json 映射到 pojo:

import com.fasterxml.jackson.databind.ObjectMapper;
// . . . 
ObjectMapper mapper = new ObjectMapper();
Payload payload = mapper.readValue(jsonString, Payload.class);

现在您可以将负载或负载的一部分发送到 db。

如果你想使用 Gson 进行映射,那么你可以看看这个example

【讨论】:

    【解决方案2】:

    这似乎是一个优化问题。 Very similar to this one here。基本上,没有一种更有效的方法来优化 3 个嵌套的 for 循环,但是,分析您的算法结构并重新评估您如何分配对象并通过 JSON 本身进行解析将是一种更好的攻击策略。

    话虽如此,正如其他人所评论的那样,Jackson 之类的工具可以为您做到这一点。

    这里有一些链接可以帮助您开始使用它:
    Jenkov Tutorial for Jackson ObjectMapper
    Baeldung Tutorial Jackson Object Mapper
    Mykong Tutorial Jackson 2 convert Java Object To/From JSON

    【讨论】:

    • 您介意将您的答案作为对问题的直接评论吗?也许将标志添加为重复?
    • 会的,谢谢。编辑:我无法直接对帖子发表评论,因为这是一个新帐户。
    • @sdumont 关键是 Json 对象中的新对象结构不同这就是为什么我必须循环进入它们
    • 已修复,谢谢。我是 stackoverflow 贡献的新手
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多