------------------ 原始邮件 ------------------ 发件人: "daize1994"notifications@github.com; 发送时间: 2019年8月6日(星期二) 下午5:34 收件人: "alibaba/fastjson"fastjson@noreply.github.com; 抄送: "小黑"81855841@qq.com;"Author"author@noreply.github.com; 主题: Re: [alibaba/fastjson] JSON.parseObject() get() 相同结构的json解析后居然返回两种类型,要不要再奇葩一点 (#2612) 你们不知道可以这样吗? JSONObject params = JSON.parseObject("{parentid: 313421415151412141}") Long xxx = params.getLong("parentid") — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread. 我的数据格式在整个程序中是一致的,在调用数据完成后就开始解析,只有至具体方法时才知晓数据包含的字段和类型.所以不能用params.getLong("parentid")
8条答案
按热度按时间2fjabf4q1#
json结构虽然相同, 但数据类型不同是因为后者的数据太大, int存不下, 所以才用long存储, 这应该没啥问题吧
mwecs4sa2#
我只想问我的函数接受一个long型参数,难道我要这样用吗?
JSONObject params= JSON.parseObject("{parentid:9223372036854775807}") ;
Object obj = params.get( "parentid");
long parentId = obj instanceof Integer ? (long) (int) ((Integer) obj) : (long) obj;
tzcvj98z3#
你看看下面的写法是不是符合你的想法
或者写个bean然后调用JSON.parseObject(String, Class)也能解决, 毕竟你那种写法中的params.get("parentid")返回的具体类型以最小能容纳的类型存储是没啥问题的, 不可能总用long去存储那些较小的整数, 这样会浪费内存
总之, fastjson只负责会根据你定义的数据类型来反序列化json, 如果你没定义数据类型, 那么以最小的数据类型存数据, 我觉得是没问题的.
yuvru6vn4#
------------------ 原始邮件 ------------------ 发件人: "TinyHai"notifications@github.com; 发送时间: 2019年8月5日(星期一) 中午11:15 收件人: "alibaba/fastjson"fastjson@noreply.github.com; 抄送: "小黑"81855841@qq.com;"Author"author@noreply.github.com; 主题: Re: [alibaba/fastjson] JSON.parseObject() get() 相同结构的json解析后居然返回两种类型,要不要再奇葩一点 (#2612) 你看看下面的写法是不是符合你的想法 JSONObject params = JSON.parseObject("{parentid: 313421415151412141}") Object obj = params.get("parentid"); long parentId = Long.valueOf(obj).longValue() 或者写个bean然后调用JSON.parseObject(String, Class)也能解决, 毕竟你那种写法中的params.get("parentid")返回的具体类型以最小能容纳的类型存储是没啥问题的, 不可能总用long去存储那些较小的整数, 这样会浪费内存 总之, fastjson只负责会根据你定义的数据类型来反序列化json, 如果你没定义数据类型, 那么以最小的数据类型存数据, 我觉得是没问题的. — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread. 好的,谢谢!我个人觉得json中的number解析时分为long和double两种即可.在64位计算机上long比int更有优势吧.
qojgxg4l5#
你们不知道可以这样吗?
vxbzzdmp6#
------------------ 原始邮件 ------------------ 发件人: "daize1994"notifications@github.com; 发送时间: 2019年8月6日(星期二) 下午5:34 收件人: "alibaba/fastjson"fastjson@noreply.github.com; 抄送: "小黑"81855841@qq.com;"Author"author@noreply.github.com; 主题: Re: [alibaba/fastjson] JSON.parseObject() get() 相同结构的json解析后居然返回两种类型,要不要再奇葩一点 (#2612) 你们不知道可以这样吗? JSONObject params = JSON.parseObject("{parentid: 313421415151412141}") Long xxx = params.getLong("parentid") — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread. 我的数据格式在整个程序中是一致的,在调用数据完成后就开始解析,只有至具体方法时才知晓数据包含的字段和类型.所以不能用params.getLong("parentid")
mo49yndu7#
请问目前有解决方案么,我也遇到这个问题,会将jsonString 中我希望的long类型转为int类型
p3rjfoxz8#
目前只能先这样了
JSONObject params= JSON.parseObject("{parentid:9223372036854775807}") ;
Object obj = params.get( "parentid");
long parentId = obj instanceof Integer ? (long) (int) ((Integer) obj) : (long) obj;