GSON中将整数列表转换为JsonArray

6

现在我的代码非常简单

// list is a List<Integer>

JsonArray arr = new JsonArray();
for(int i : list) {
    array.add(i);
}

我有些惊讶地浏览API时没有找到一种更少手动、更实用的方式来做这件事。我期望有一个addRangeaddArray构造函数,可以从Collection转换成JsonArray等。有这样的函数吗?或者存在某些根本性限制使这不可能吗?


你仍然有三个不同的变量(arr,array和list)。请修复!另外,在我说我要删除我的评论后在这里发表评论可能是一个糟糕的选择,因为现在你已经回应了我说要删除的评论。在你解决变量命名问题之后,我也会删除这个评论。 - Rainbolt
@john,你似乎一直在关注JSR 353,这是Java EE对JSON解析/生成的实现。它是一个非常好的库。OP可能想要研究一下它。 - Sotirios Delimanolis
i改成Integer类型不是更合理吗?这样可以避免双重转换。否则,上述代码已经相当清晰和高效了,为什么要改呢? - Hot Licks
1个回答

16
如果您将列表传递给Gson#toJsonTree方法,它将返回一个JsonArray。
List<Integer> list = new ArrayList<>();
list.add(5);
JsonElement result = new GsonBuilder().create().toJsonTree(list);
System.out.println(result.getClass()); // prints "class com.google.gson.JsonArray"

附言:

在上述代码中,我使用内联方式创建了Gson实例(new GsonBuilder().create()),这是出于可读性和复制粘贴的考虑。在实践中,你很可能不会每次需要转换列表时都创建一个新的Gson实例,而是提前创建一个实例以便重用。


1
还适用于 int 数组:int[] numbers = { 1, 1, 2, 3, 5, 8, 13 }; JsonElement jsonTree = new Gson().toJsonTree(numbers); System.out.println(jsonTree); - Ray Hulha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接