-
Notifications
You must be signed in to change notification settings - Fork 550
Description
问题描述
升级至fastjson2,反序列化fastjson包含科学计数法表示的Double值
环境信息
- OS信息: Windows 10
- JDK信息: jdk1.8.0_181
- 版本信息:Fastjson2 2.0.59
fastjson 1.2.83 升级至 fastjson 2.0.59,使用兼容模式
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.59</version>
</dependency>重现步骤
1.如下json反序列化时异常com.alibaba.fastjson2.JSONException: illegal number
package com.alibaba.fastjson;
import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
public class DoubleTest {
@Data
private static class DoubleBean {
private Double test;
}
@Test
public void test() {
String json = "{\"@type\":\"com.alibaba.json.DoubleTest$DoubleBean\",\"test\":1.2E-4D}";
DoubleBean doubleBean = JSON.parseObject(json, DoubleBean.class);
Assert.assertEquals((Double) 1.2E-4, doubleBean.getTest());
}
}fastjson1对应序列化代码
package com.alibaba.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
import java.util.Map;
public class DoubleTest {
@Data
private static class DoubleBean {
private Double test;
}
@Test
public void test() {
DoubleBean bean = new DoubleBean();
bean.setTest(0.00012);
String json = JSON.toJSONString(bean, SerializerFeature.WriteClassName);
// {"@type":"com.alibaba.json.DoubleTest$DoubleBean","test":1.2E-4D}
System.out.println(json);
}
}期待的正确结果
能保持兼容,正确反序列化。
相关日志输出
Caused by: com.alibaba.fastjson2.JSONException: illegal number, offset 65, char }
at com.alibaba.fastjson2.JSONReader.numberError(JSONReader.java:6596)
at com.alibaba.fastjson2.JSONReaderUTF16.skipNumber(JSONReaderUTF16.java:3208)
at com.alibaba.fastjson2.JSONReaderUTF16.skipValue(JSONReaderUTF16.java:3562)
at com.alibaba.fastjson2.JSONReaderUTF16.skipValue(JSONReaderUTF16.java:3568)
at com.alibaba.fastjson2.reader.ObjectReaderBean.processExtra(ObjectReaderBean.java:134)
at com.alibaba.fastjson2.reader.ObjectReaderBean.processExtra(ObjectReaderBean.java:96)
at com.alibaba.fastjson2.reader.ObjectReaderAdapter.readFieldValue(ObjectReaderAdapter.java:512)
at com.alibaba.fastjson2.reader.ORG_1_1_DoubleBean.readObject(Unknown Source)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:541)
... 25 more
附加信息
无