首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组的gson - long值变为浮点值

数组的gson是指使用Google的Gson库进行JSON数据的序列化和反序列化操作时,遇到long类型的数据被转换为浮点数类型的情况。

Gson是一个Java库,用于将Java对象转换为JSON格式的数据,以及将JSON数据转换为Java对象。在进行对象序列化和反序列化时,Gson会根据对象的类型自动选择合适的数据类型进行转换。然而,由于Java中的long类型表示的范围比浮点数类型更大,因此在某些情况下,Gson会将long类型的数据转换为浮点数类型,以保证数据的准确性。

这种情况下,如果希望保持long类型的数据不被转换为浮点数类型,可以通过使用Gson的TypeAdapter来自定义序列化和反序列化的规则。通过自定义TypeAdapter,可以确保long类型的数据在序列化和反序列化过程中保持其原始的数据类型。

对于解决数组的gson中long值变为浮点值的问题,可以按照以下步骤进行操作:

  1. 创建一个自定义的TypeAdapter类,实现Gson的TypeAdapter接口。
  2. 在TypeAdapter类中重写serialize()方法和deserialize()方法,分别用于序列化和反序列化操作。
  3. 在serialize()方法中,判断字段的类型,如果是long类型,则将其转换为字符串类型进行序列化。
  4. 在deserialize()方法中,判断字段的类型,如果是字符串类型,则将其转换为long类型进行反序列化。
  5. 在使用Gson进行序列化和反序列化时,通过调用GsonBuilder的registerTypeAdapter()方法,将自定义的TypeAdapter注册到Gson中。

以下是一个示例代码,展示了如何使用自定义TypeAdapter解决数组的gson中long值变为浮点值的问题:

代码语言:java
复制
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;

public class LongTypeAdapter extends TypeAdapter<Long> {
    @Override
    public void write(JsonWriter out, Long value) throws IOException {
        if (value == null) {
            out.nullValue();
        } else {
            out.value(String.valueOf(value));
        }
    }

    @Override
    public Long read(JsonReader in) throws IOException {
        if (in.peek() == JsonToken.NULL) {
            in.nextNull();
            return null;
        } else {
            String stringValue = in.nextString();
            try {
                return Long.parseLong(stringValue);
            } catch (NumberFormatException e) {
                return null;
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Long.class, new LongTypeAdapter())
                .create();

        // 示例数据
        long[] longArray = {1234567890123456789L, 9876543210987654321L};

        // 序列化为JSON字符串
        String json = gson.toJson(longArray);
        System.out.println("Serialized JSON: " + json);

        // 反序列化为long数组
        long[] deserializedArray = gson.fromJson(json, long[].class);
        System.out.println("Deserialized Array: " + Arrays.toString(deserializedArray));
    }
}

在上述示例代码中,我们创建了一个名为LongTypeAdapter的自定义TypeAdapter类,用于处理long类型的序列化和反序列化。在Main类中,我们使用GsonBuilder注册了这个自定义的TypeAdapter,并通过Gson进行了序列化和反序列化操作。

注意:这里的示例代码仅针对数组的情况,如果需要处理对象中的long字段,可以类似地创建自定义TypeAdapter,并在对象的字段上使用@SerializedName注解指定字段的序列化和反序列化规则。

希望以上内容能够帮助到您,如果有任何疑问,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

接口回 Long ,竟然被偷了

昨天下午,有伙伴儿在群里面问了下面这么个问题: 数据库用bigint存储了记录ID,Java代码用Long类型映射记录对应ID;前端调用SpringBoot接口获取数据,后端debug时Long...型ID能正常取到,但是返回到前端之后,ID后半段被“偷”了,查询id为1、2、3时候又是正常;数据如下: 两对比: 后端:1508733541883731970 前端:1508733541883732000...原因 这是因为Javascript中数字精度是有限,Java中Long精度超出了Javascript处理范围。...解决方案 但实际开发过程中,数据库bigint,JavaLong都是比较常用数据类型,不可能因为前端JS精度问题,而不去使用,因此,为了避免精度丢失,针对这种比较大数值类型,可以将其以文本形式返回...,过于笼统,不够灵活; 方式三,单类型转换 可以自定义一个Jackson对象转换构造器,将指定类型以特定序列化方式进行转换,比如遇到Long、Double时候,才转换为文本 @Bean("jackson2ObjectMapperBuilderCustomizer

2K10
  • java如何打印数组,Java打印数组元素

    大家好,又见面了,我是你们朋友全栈君。 本篇文章帮大家学习java打印数组元素,包含了Java打印数组元素使用方法、操作技巧、实例演示和注意事项,有一定学习价值,大家可以用来参考。...以下实例演示了如何通过重载 MainClass 类 printArray 方法输出不同类型(整型, 双精度及字符型)数组:public class MainClass { public static...5.5, 6.6, 7.7 }; Character[] characterArray = { ‘H’, ‘E’, ‘L’, ‘L’, ‘O’ }; System.out.println(“输出整型数组...(“\n输出字符型数组:”); printArray(characterArray); } } 以上代码运行输出结果为: 输出整型数组: 1 2 3 4 5 6 输出双精度型数组: 1.1 2.2 3.3...4.4 5.5 6.6 7.7 输出字符型数组: H E L L O 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131413.html原文链接:https:/

    4.3K10

    php 数组根据找key,从数组查找key对应 – key

    datetimeDEFAULTNULL,PRIMARYKEY… php$arr = [5=>’name’,8=>’age’,10=>’city’]; $num = ‘5,10’; $str = ”; //如何查找5,10对应...=value; } } 回复内容: php$arr = [5=>’name’,8=>’age’,10=>’city’]; $num = ‘5,10’; $str = ”; //如何查找5,10对应,...除了楼上给出分解num后通过array_key_exists在arr数组寻找相应后在implode到一起之外。...exists(key):确认一个key是否存在del(key):删除一个keytype(key):返回类型keys(pattern):返回满足给定pattern所有keyrandomkey:随机…...PHP可以模拟实现Hash表增删改查。通过对key映射到数组一个位置来访问。映射函数叫做Hash函数,存放记录数组称为Hash表。 Hash函数把任意长度和类型key转换成固定长度输出。

    11.6K20

    分割数组最大

    问题描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空连续子数组。设计一个算法使得这 m 个子数组各自和最大最小。...其中最好方式是将其分为[7,2,5] 和 [10,8], 因为此时这两个子数组各自最大为18,在所有情况中最小 来源:力扣(LeetCode) 链接:https://leetcode-cn.com...解决方案 贪心+二分 该问题是一道经典贪心+二分问题。 不妨设k为子数组最大和,由题意可知存在如下结论: 若以子数组和最大为k可以分割出m个子数组,则以k+ 1也一定能分割出m个子数组。...由该结论我们就可以对k从[max(nums), sum(nums)]区间中二分查找出满足条件k最小。上式中下界max(nums)为当前数组最大,sum(nums)为当前数组之和。...dp[i - 1] [k - 1]为前段最大子数组和,max(…)是为了获得最大子数组和,外面的min(…)是为选出所有分割子数组和最大最小那个。

    4.4K10

    C语言整型溢出问题 int、longlong long取值范围 最大最小「建议收藏」

    溢出和取值范围 C语言整型溢出问题 整数溢出 int、long int 、long long int 占用字节疑问 《C和指针》中写过:long与int:标准只规定long不小于int长度,int...最小 在#include存有各个类型最大和最小 CHAR_MIN       char最小 SCHAR_MAX      signed char 最大 SCHAR_MIN...int 最大 UINT_MIN       unsigned int 最小 LONG_MAX      long最大 LONG_MIN       long最小 ULONG_MAX      ...unsigned long 最大 FLT_MANT_DIG    float 类型尾数 FLT_DIG        float 类型最少有效数字位数 FLT_MIN_10_EXP   带有全部有效数...float类型负指数最小(以10为底) FLT_MAX_10_EXP    float类型正指数最大(以10为底) FLT_MIN        保留全部精度float类型正数最小 FLT_MAX

    1.7K20

    布尔数组状态压缩

    相应地,会设定一个布尔数组visited[ i ] [ j ],表示某一个位置是否被遍历,true表示被遍历,false表示未被遍历。...我们首先看看图论建模是如何建模, 二维数组会有两个索引下标i和j,分别对阵为行和列。我们会设定一个常量C,而这个常量正是列长度,即nums[i].length。...这里就不进行多介绍了,因为本篇介绍布尔数组压缩状态小技巧,再讲三维矩阵图论建模就偏了,了解二维矩阵就好了。...在进行二维矩阵图论建模中,如果不转成图形结构,直接在二维矩阵上计算,我们会设定一个布尔类型二维数组visited,数组表示图某个节点是否遍历过。...= 0) visited -= 1<<i; 举一反三,学会了二进制数组压缩成一个数字状态,多进制数组也同样可以压缩状态,只需要找到最大那个数就可以了。

    1.5K30

    leetcode - 分割数组最大

    题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空连续子数组。设计一个算法使得这 m 个子数组各自和最大最小。...其中最好方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自最大为18,在所有情况中最小。...题解 第一点,被分成m个子数组最大必在nums最大和nums元素之和之中。...第二点,弱弱地猜猜看,拿所在区间范围中间去套,看看其能够得到多少个子区间数,如果说所得到子区间数偏大于m,说明你划分太小了,令左区间等于中间加1,反之相反。.../interview/split_array.js 项目地址: https://zhengjiangtao.cn/coding/interview/split_array.js 参考文献 410.分割数组最大

    1.5K20

    js中如何判断数组中包含某个特定_js数组是否包含某个

    array.indexOf 判断数组中是否存在某个,如果存在返回数组元素下标,否则返回-1 let arr = ['something', 'anything', 'nothing',...anything']; let index = arr.indexOf('nothing'); # 结果:2 array.includes(searchElement[, fromIndex]) 判断一个数组是否包含一个指定...参数:searchElement 需要查找元素。 参数:thisArg(可选) 从该索引处开始查找 searchElement。...numbers.includes(8); # 结果: true result = numbers.includes(118); # 结果: false array.find(callback[, thisArg]) 返回数组中满足条件第一个元素...方法,该方法返回元素在数组下标,如果不存在与数组中,那么返回-1; 参数:searchElement 需要查找元素

    18.4K40

    VBA数组排序_vba函数返回 数组

    大家好,又见面了,我是你们朋友全栈君。 我们平时用表格排序,只相对来说是在在表格中升序降序。今天就好奇如果数组中实现排序 他是怎么实现呢。...Integer Dim MinValue As String arr = Range("a1:a10") For i = 1 To UBound(arr) MinValue = arr(i, 1) '将第一个先默认为最小...MinIndex = i '记录最小索引位置 For j = MinIndex + 1 To UBound(arr) If arr(j, 1) < MinValue Then MinValue...= arr(j, 1) MinIndex = j End If Next '以此和当前最小做对比,比较出后面的最小并记录 及索引位置 '因为小我们都放在最前面,所以遍历只需从当前后面开始就可以了...,只会有两个可能,一种是MinIndex > i(在默认最小后面有比当前还小),另一种MinIndex = i :(在最小后面没有找到比当前再小)。

    3.4K40

    Javascript获取数组最大和最小方法汇总

    比较数组中数值大小是比较常见操作,下面同本文给大家分享四种放哪广发获取数组中最大和最小,对此感兴趣朋友一起学习吧 比较数组中数值大小是比较常见操作,比较大小方法有多种,比如可以使用自带...apply能让一个方法指定调用对象与传入参数,并且传入参数是以数组形式组织。...alert(Math.min.apply(null, a));//最小 多维数组可以这么修改: var a=[1,2,3,[5,6],[1,4,8]]; var ta=a.join(",").split...(",");//转化为一维数组 alert(Math.max.apply(null,ta));//最大 alert(Math.min.apply(null,ta));//最小 以上内容是小编给大家分享...Javascript获取数组最大和最小方法汇总,希望大家喜欢。

    7.1K50
    领券