java - 使用 javax.json 从列表创建 json

标签 java json extjs

我有一个包含 3000 个项目的列表,我必须从中创建一个 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()))));
            }

如何提高这里的性能?

最佳答案

使用 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()))));
                }

关于java - 使用 javax.json 从列表创建 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033148/

相关文章:

javascript - console.log(JSON.parse(result)) 在我期望看到 JSON 的地方打印 [Object]

android - 带有 SenchaTouch 的 PhoneGap for Android 应用程序

javascript - 如何创建仅屏蔽 ExtJs 4 中特定组件的模态窗口?

java - Rest Easy Client Framework 值在解码后丢失

Java fork/join 框架逻辑

php - 将 httpbody 作为 json 参数 swift 发布

javascript - 如何让按钮不获得焦点?

java - HTML 部署中的 LibGDX 未捕获运行时异常

用于回归测试的记录程序执行的Java自动化测试工具

json - 如何使用 jq 提取所有(也是嵌套的)键名