Empty string to null ( "" to Integer as null )

8,039 views
Skip to first unread message

Rubish Tam

unread,
Jun 12, 2012, 12:36:20 PM6/12/12
to google-gson
How can I customize the conversion of "" (Empty string) to null when
JSON to Object.
Or
Can I by pass all the format exceptions?

Coding:
Gson gson = new Gson();
Integer i = gson.fromJson("\"\"", Integer.class);

Exception:
Exception in thread "main" com.google.gson.JsonSyntaxException:
java.lang.NumberFormatException: empty String
at com.google.gson.internal.bind.TypeAdapters
$7.read(TypeAdapters.java:232)
at com.google.gson.internal.bind.TypeAdapters
$7.read(TypeAdapters.java:222)
at com.google.gson.Gson.fromJson(Gson.java:791)
at com.google.gson.Gson.fromJson(Gson.java:757)
at com.google.gson.Gson.fromJson(Gson.java:706)
at com.google.gson.Gson.fromJson(Gson.java:678)
at A.main(A.java:9)
Caused by: java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:
1050)
at java.lang.Double.parseDouble(Double.java:521)
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:599)
at com.google.gson.internal.bind.TypeAdapters
$7.read(TypeAdapters.java:230)
... 6 more

Thanks

Alexander Korolev

unread,
Aug 1, 2012, 9:55:53 AM8/1/12
to googl...@googlegroups.com
Resolution for Long. Adapt to int if necessary. Gson lib version 2.2.2


private static TypeAdapter<Number> LongTypeAdapter = new TypeAdapter<Number>() {

        @Override
        public void write(JsonWriter out, Number value)
                throws IOException {
            out.value(value);
        }

        @Override
        public Number read(JsonReader in) throws IOException {
            if (in.peek() == JsonToken.NULL) {
                in.nextNull();
                return null;
            }
            try {
                String result = in.nextString();
                if ("".equals(result)) {
                    return null;
                }
                return Long.parseLong(result);
            } catch (NumberFormatException e) {
                throw new JsonSyntaxException(e);
            }
        }
    };
   
    private final static Gson gson = new GsonBuilder()
        .registerTypeAdapter(long.class, LongTypeAdapter)
        .registerTypeAdapter(Long.class, LongTypeAdapter).create();

Reply all
Reply to author
Forward
0 new messages