fastjson JSON.parseObject() get() 相同结构的json解析后居然返回两种类型,要不要再奇葩一点

n53p2ov0  于 2021-11-27  发布在  Java
关注(0)|答案(8)|浏览(309)

JSONObject obj = JSON.parseObject("{parentid:1}") ;
obj.get("parentid") //获取到的是int类型

JSONObject obj = JSON.parseObject("{parentid:9223372036854775807}") ;
obj.get("parentid") //获取到的是long类型
要不要再奇葩一点,应该是大兼容小吧

2fjabf4q

2fjabf4q1#

json结构虽然相同, 但数据类型不同是因为后者的数据太大, int存不下, 所以才用long存储, 这应该没啥问题吧

mwecs4sa

mwecs4sa2#

我只想问我的函数接受一个long型参数,难道我要这样用吗?
JSONObject params= JSON.parseObject("{parentid:9223372036854775807}") ;
Object obj = params.get( "parentid");
long parentId = obj instanceof Integer ? (long) (int) ((Integer) obj) : (long) obj;

tzcvj98z

tzcvj98z3#

你看看下面的写法是不是符合你的想法

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, 如果你没定义数据类型, 那么以最小的数据类型存数据, 我觉得是没问题的.

yuvru6vn

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更有优势吧.

qojgxg4l

qojgxg4l5#

你们不知道可以这样吗?

JSONObject params = JSON.parseObject("{parentid: 313421415151412141}") 
Long xxx = params.getLong("parentid")
vxbzzdmp

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")

mo49yndu

mo49yndu7#

请问目前有解决方案么,我也遇到这个问题,会将jsonString 中我希望的long类型转为int类型

p3rjfoxz

p3rjfoxz8#

目前只能先这样了
JSONObject params= JSON.parseObject("{parentid:9223372036854775807}") ;
Object obj = params.get( "parentid");
long parentId = obj instanceof Integer ? (long) (int) ((Integer) obj) : (long) obj;

相关问题