diff --git a/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java b/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java index 9283680..7e9c763 100644 --- a/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java +++ b/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java @@ -239,6 +239,9 @@ final class StandardJsonAdapters { case BOOLEAN: return reader.nextBoolean(); + case NULL: + return reader.nextNull(); + default: throw new IllegalStateException("Expected a value but was " + reader.peek() + " at path " + reader.getPath()); diff --git a/moshi/src/test/java/com/squareup/moshi/ObjectAdapterTest.java b/moshi/src/test/java/com/squareup/moshi/ObjectAdapterTest.java index eea2669..d85daad 100644 --- a/moshi/src/test/java/com/squareup/moshi/ObjectAdapterTest.java +++ b/moshi/src/test/java/com/squareup/moshi/ObjectAdapterTest.java @@ -84,6 +84,17 @@ public final class ObjectAdapterTest { assertThat(adapter.fromJson("[0, 1]")).isEqualTo(Arrays.asList(0d, 1d)); } + @Test public void fromJsonDoesNotFailOnNullValues() throws Exception { + Map emptyDelivery = new LinkedHashMap<>(); + emptyDelivery.put("address", null); + emptyDelivery.put("items", null); + + Moshi moshi = new Moshi.Builder().build(); + JsonAdapter adapter = moshi.adapter(Object.class); + assertThat(adapter.fromJson("{\"address\":null, \"items\":null}")) + .isEqualTo(emptyDelivery); + } + @Test public void toJsonCoercesRuntimeTypeForCollections() throws Exception { Collection collection = new AbstractCollection() { @Override public Iterator iterator() {