【问题标题】:From Java Object to JSON String using javax.json使用 javax.json 从 Java 对象到 JSON 字符串
【发布时间】:2015-06-25 13:19:13
【问题描述】:

是否可以使用 Java EE 7 的 javax.json 库从 List<MyClass> 创建 JSON 字符串,而无需遍历 List<MyClass>

这就是我现在所做的,2000 次迭代的性能是不可接受的。有什么建议吗?

List<MyClass> items = MyDB.getAllItems();
JsonObjectBuilder builder = Json.createObjectBuilder();
builder.add("success", true);
JsonArrayBuilder childrenArrayBuilder = Json.createArrayBuilder();

for (MyClass item : items) {
     childrenArrayBuilder.add(
        Json.createObjectBuilder()
            .add("id", getTreeNodeId(item) + "-" + (idSplit[1]))
            .add("nodeStatus", b)
            .add("text", item.getName())
            .add("leaf", false));
}

【问题讨论】:

  • 简单地说,如果您想要所有数据,您必须遍历所有数据 - 如果您只想要 100 个条目,您可以迭代到 100。
  • 不管你怎么做,总有人必须遍历列表。否则所有项目应该如何成为 JSON 的一部分?
  • 该列表包含大约 5000 个项目,如果我想对其进行迭代,性能并不好。
  • 亚历克斯是什么意思?使用 gson 或 JSONArray 是可能的!
  • 这有点老了,但仍然值得回应.... @sina:如果您使用的是 gson,那么在其内部,gson 正在迭代所有 5000 个项目。性能可能更好或更差,但无论哪种方式,这将是一个 O(n) 操作。不同之处主要在于您编写了多少代码,而不在于 VM 是否遍历整个列表。

标签: json jakarta-ee java-ee-7


【解决方案1】:

您在循环中创建了很多对象,这可能是不必要的。使用 GSON 并且就MyClass 仅包含您需要的内容,我将执行以下操作:

List<MyClass> list = MyDB.getAllItems();
GSON gson = new GSON();
String myString = gson.toJson(list);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多