嵌套循环的最佳做法

时间:2018-10-11 15:50:45

标签: java cloudant

我正在读取Json大文件,我想将这些对象映射到文件中并将其插入db

Json结构

<SendExpense xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pDriver>test</pDriver>
<pPassword>1234</pPassword>
<pTruck>206</pTruck>
<expense>
  <Id>0</Id>
  <DriverID>0</DriverID>
  <ItemDate>2018-10-10T18:41:57.151623-05:00</ItemDate>
  <Type>2</Type>
  <Amount>123.45</Amount>
  <ItemDescription>This is a new expense</ItemDescription>
  <TruckNum>206</TruckNum>
  <TruckID>0</TruckID>
  <BackupReceivedInd xsi:nil="true" />
  <PaidInd>false</PaidInd>
  <PaidDate>0001-01-01T00:00:00</PaidDate>
  <ExportBatchID>0</ExportBatchID>
  <CreationDate>0001-01-01T00:00:00</CreationDate>
  <UpdatedDate>0001-01-01T00:00:00</UpdatedDate>
  <Local>true</Local>
</expense>
</SendExpense>

文件包含A的多个块

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

{

"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",

                    }
                ]
            }
        ]
    }
]
}

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

可以执行任何增强操作来增强循环过程吗?

2 个答案:

答案 0 :(得分:0)

我将始终创建模型以将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

答案 1 :(得分:-1)

这似乎是一个优化问题。 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