我有一个包含3000个项目的List,我必须从中创建一个json并将其发送到我的客户端代码Extjs。由于JsonArrayBuilder不接受列表,我正在迭代列表并添加创建每个json对象,最后将其发送到客户端。问题是这个过程需要13秒,这真的很高。
这是我制作这个json数组的方法。
JsonObjectBuilder builder = Json.createObjectBuilder();
JsonArrayBuilder childrenArrayBuilder = Json.createArrayBuilder();
builder.add("success", true);
builder.add("children, childrenArrayBuilder);
这是我如何遍历列表
for (TagDefinitionProject tt : myList) {
childrenArrayBuilder.add(
Json.createObjectBuilder()
.add("id", getTreeNodeId(tt.getTag()) + "-" + (idSplit[1]))
.add("nodeStatus", tt.getStatus())
.add("text", tt.getNJTagName())
.add("tagNJName", tt.getTag().getName())
.add("baseType", tt.getTag().getBaseType().getName())
.add("definitionType", def)
.add("leaf", (tt.getTag().getChildren().size() == 1 || tt.getTag().getChildren().get(1).getChild().equals(tt.getTag()))));
}
如何改善这里的表现?
答案 0 :(得分:0)
使用javax Json库创建多个构建器的首选方法是使用JsonBuilderFactory。我在下面修改了你的代码。
// Create a new factory. The argument, config, can be null or
// contain a Map with configuration values for the created builders.
JsonBuilderFactory factory = Json.createBuilderFactory(config);
JsonObjectBuilder builder = factory.createObjectBuilder();
JsonArrayBuilder childrenArrayBuilder = factory.createArrayBuilder();
builder.add("success", true);
builder.add("children", childrenArrayBuilder);
for (TagDefinitionProject tt : myList) {
childrenArrayBuilder.add(
factory.createObjectBuilder()
.add("id", getTreeNodeId(tt.getTag()) + "-" + (idSplit[1]))
.add("nodeStatus", tt.getStatus())
.add("text", tt.getNJTagName())
.add("tagNJName", tt.getTag().getName())
.add("baseType", tt.getTag().getBaseType().getName())
.add("definitionType", def)
.add("leaf", (tt.getTag().getChildren().size() == 1 || tt.getTag().getChildren().get(1).getChild().equals(tt.getTag()))));
}