gpt4 book ai didi

java - 顶点 : My JsonArray consisting of Long values becomes suddenly a mix of Integer- and Long-Values?

转载 作者:行者123 更新时间:2023-12-02 03:21:33 26 4
gpt4 key购买 nike

我有以下由长值组成的 JsonArray:

[1234567873,852369471,9517,789 ,4826,96127435]
Long , Long ,Long,Long,Long, Long

通过事件总线发送后,有一个由整数和长整型组成的 JsonArray:

 [1234567873,852369471,9517   ,789    ,4826   ,96127435]
Long , Long ,Integer,Integer,Integer,Long

显然Vertx缩小了小数字-Longs以节省内存-这就是为什么当我尝试以下代码时我得到Cannot cast from Integer to Long-ClassCastException:

List<Long> collect = jsonArray.stream().map(element -> (Long) element).collect(Collectors.toList());

与以下代码行相反:

    for (int jsonArrayIndex = 0; jsonArrayIndex < jsonArray.size(); jsonArrayIndex++) {
Long longValue = jsonArray.getLong(jsonArrayIndex);
}

这如何运作?

最佳答案

JSON 没有 Long 或 Integer 的概念,只有更一般的概念 number (请参阅 json.org 上的 JSON 规范)。因此,由您的代码决定将特定 JSON 数字解析为哪个对象(即 Integer 或 Long)。

通过使用 jsonArray.stream() (返回 Stream<Object> )您允许 Vertx库来决定将每个元素解析为哪个对象。在这种情况下,它会为每个元素一一选择最合适的类型,即有些元素被解析为Long。一些进入 Integer 。如果您有任何类似 1.5 的数字,这些可能会被解析为 Double (不过你需要检查一下)。

但是,通过使用 jsonArray.getLong()方法,你告诉Vertx 已经决定将每个元素解析为哪个对象(a Long )a,因此它不会试图通过为每个元素选择最合适的类型来变得聪明。如果您有任何类似 1.5 的号码在这里,此方法可能会抛出异常(同样,您必须检查这一点)。

关于java - 顶点 : My JsonArray consisting of Long values becomes suddenly a mix of Integer- and Long-Values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com