java - GSON 中有效双数的 NumberFormatException

标签 java json gson

输入 JSON:

 "coordinates":[
               ​9.40323,
               ​56.45364
            ]

即使数字有效,我在使用 gson 时也会遇到数字格式异常

Caused by: java.lang.NumberFormatException: For input string: "​9.40323"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
    at java.lang.Double.parseDouble(Double.java:540)
    at com.google.gson.stream.JsonReader.nextDouble(JsonReader.java:925)
    at com.google.gson.Gson$3.read(Gson.java:259)
    at com.google.gson.Gson$3.read(Gson.java:253)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.Gson.fromJson(Gson.java:810)
    at com.google.gson.Gson.fromJson(Gson.java:775)
    at com.google.gson.Gson.fromJson(Gson.java:724)
    at com.google.gson.Gson.fromJson(Gson.java:696)

我的 GSON 版本是 2.3.1,区域设置是 en_US。 GSON 对象创建为

GsonBuilder builder = new GsonBuilder(); 

        // Register an adapter to manage the date types as long values 
        builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { 
           public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
              return new Date(json.getAsJsonPrimitive().getAsLong());
           } 
        });

        Gson gson = builder.create();

最佳答案

您的字符串包含一些特殊字符。它看起来只是数字,但开头有三个额外的字节。

$ od -xc
"​9.40323"
0000000    e222    8b80    2e39    3034    3233    2233    000a
          " 342 200 213   9   .   4   0   3   2   3   "  \n
0000015

如果它作为字符串出现,您可以使用删除非 ASCII 字符

str = str.replaceAll("[^\\x00-\\x7F]", "");

关于java - GSON 中有效双数的 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879172/

相关文章:

java - 从一个特定的表达式树到一个通用的表达式树 - java

javascript - 我可以添加交互性 (JS/CSS) 来影响 Bodymovin/Lottie 动画中的元素吗?

java - GSON反序列化复杂对象数组

java - 我如何比较 pdf 的 2 个版本并忽略页脚?

java - 当线程被中断时,BlockingQueue 方法是否总是抛出 InterruptedException?

java - 如何在 Unix 上检查文件是否存在并可从 Java 执行?

javascript - 获取json响应而不指定 '.json in URL'

mysql - 如何将 JSON 元素放入 UITextView 中?

JSON 对象的 Java 表示

java - 我怎样才能让 Tomcat 解释一个 jar 库?