我正在读取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条记录?
可以执行任何增强操作来增强循环过程吗?
答案 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