GSON中的NumberFormatException用于有效的双精度数

时间:2016-01-19 14:19:19

标签: 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();

1 个答案:

答案 0 :(得分:3)

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

$ 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]", "");