fastjson解析错误.JSONException: Rounding necessary
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastjson解析错误.JSONException: Rounding necessary相关的知识,希望对你有一定的参考价值。
参考技术A 解析报错:com.alibaba.fastjson.JSONException: Rounding necessary
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:708)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:677)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:245)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:217)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:187)
at com.t3.network.helper.f.onNext(:5)
at io.reactivex.internal.operators.observable.ObservableObserveOn ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.toBigIntegerExact(BigDecimal.java:2392)
at java.math.BigDecimal.valueExact(BigDecimal.java:2869)
at java.math.BigDecimal.intValueExact(BigDecimal.java:2454)
at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:107)
at com.alibaba.fastjson.parser.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:73)
at com.alibaba.fastjson.parser.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1012)
at com.alibaba.fastjson.parser.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:770)
at com.alibaba.fastjson.parser.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:118)
at com.alibaba.fastjson.parser.ListTypeFieldDeserializer.parseArray(ListTypeFieldDeserializer.java:214)
找了大佬,一针见血指出问题:边界出错;就是位数可能太多。网上找解决方法,有的是int 类型赋值了3.6这种float了,也会出现这种解析错误。
而我的主要是解析下面为double时造成
"lat":31.911295789937384,
"lng":118.81761768130724,
返回位数太多,应该是超出android 中的double能容纳的位数了;直接改为String ,完美解决!!!
FastJson 解析错误问题查找
使用 fastjson 解析有时会碰到如下错误:
com.alibaba.fastjson.JSONException: syntax error, expect , actual pos xxx, ...
错误日志 也是模棱两可,不写出具体的问题, 这个时候可以使用 Gson 来转换:
new Gson().fromJson(json, mType);
Gson 转换如果出现问题会有详细的描述,如下:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Expected an int but was 1494293577740 at line 1 column 208 path $.lastModDate
可以具体到 哪个 字段 错误,上面的错误就是 字段 lastModDate 的类型 不对 声明的是 int 型,但是 json 返回的数据 1494293577740 超出了 int 的范围, 修改 lastModDate 的类型为 long 再次运行就成功了。
以上是关于fastjson解析错误.JSONException: Rounding necessary的主要内容,如果未能解决你的问题,请参考以下文章
fastjson 调用JSONObject.toJSON(),如果是解析泛型对象会报OutOfMemoryError错误
fastjson 解析报错 com.alibaba.fastjson.JSONException: create instance error...