diff --git a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java index abe5643..d0a76f7 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java @@ -464,7 +464,8 @@ final class JsonUtf8Reader extends JsonReader { } // We've read a complete number. Decide if it's a PEEKED_LONG or a PEEKED_NUMBER. - if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative)) { + if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative) + && (value != 0 || !negative)) { peekedLong = negative ? value : -value; buffer.skip(i); return peeked = PEEKED_LONG; diff --git a/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java b/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java index ce2b05b..2eb28b7 100644 --- a/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java +++ b/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java @@ -330,6 +330,12 @@ public final class JsonUtf8ReaderTest { assertThat(reader.nextDouble()).isEqualTo(-92233720368547758080d); } + @Test public void negativeZeroIsANumber() throws Exception { + JsonReader reader = newReader("-0"); + assertEquals(NUMBER, reader.peek()); + assertEquals("-0", reader.nextString()); + } + @Test public void quotedNumberWithEscape() throws IOException { JsonReader reader = newReader("[\"12\u00334\"]"); reader.setLenient(true);