Do not peek during a "skipValue" if a value has already been peeked.
This commit is contained in:
parent
3f2efac95e
commit
84201c015f
|
@ -1225,7 +1225,11 @@ public class JsonReader implements Closeable {
|
|||
public void skipValue() throws IOException {
|
||||
int count = 0;
|
||||
do {
|
||||
int p = doPeek();
|
||||
int p = peeked;
|
||||
if (p == PEEKED_NONE) {
|
||||
p = doPeek();
|
||||
}
|
||||
|
||||
if (p == PEEKED_BEGIN_ARRAY) {
|
||||
push(JsonScope.EMPTY_ARRAY);
|
||||
count++;
|
||||
|
|
|
@ -71,6 +71,38 @@ public final class JsonReaderTest extends TestCase {
|
|||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipArray() throws IOException {
|
||||
JsonReader reader = new JsonReader(reader(
|
||||
"{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}"));
|
||||
reader.beginObject();
|
||||
assertEquals("a", reader.nextName());
|
||||
reader.skipValue();
|
||||
assertEquals("b", reader.nextName());
|
||||
assertEquals(123, reader.nextInt());
|
||||
reader.endObject();
|
||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipArrayAfterPeek() throws Exception {
|
||||
JsonReader reader = new JsonReader(reader(
|
||||
"{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}"));
|
||||
reader.beginObject();
|
||||
assertEquals("a", reader.nextName());
|
||||
assertEquals(BEGIN_ARRAY, reader.peek());
|
||||
reader.skipValue();
|
||||
assertEquals("b", reader.nextName());
|
||||
assertEquals(123, reader.nextInt());
|
||||
reader.endObject();
|
||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipTopLevelObject() throws Exception {
|
||||
JsonReader reader = new JsonReader(reader(
|
||||
"{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}"));
|
||||
reader.skipValue();
|
||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipObject() throws IOException {
|
||||
JsonReader reader = new JsonReader(reader(
|
||||
"{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}"));
|
||||
|
@ -83,6 +115,23 @@ public final class JsonReaderTest extends TestCase {
|
|||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipObjectAfterPeek() throws Exception {
|
||||
String json = "{" + " \"one\": { \"num\": 1 }"
|
||||
+ ", \"two\": { \"num\": 2 }" + ", \"three\": { \"num\": 3 }" + "}";
|
||||
JsonReader reader = new JsonReader(reader(json));
|
||||
reader.beginObject();
|
||||
assertEquals("one", reader.nextName());
|
||||
assertEquals(BEGIN_OBJECT, reader.peek());
|
||||
reader.skipValue();
|
||||
assertEquals("two", reader.nextName());
|
||||
assertEquals(BEGIN_OBJECT, reader.peek());
|
||||
reader.skipValue();
|
||||
assertEquals("three", reader.nextName());
|
||||
reader.skipValue();
|
||||
reader.endObject();
|
||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
||||
}
|
||||
|
||||
public void testSkipInteger() throws IOException {
|
||||
JsonReader reader = new JsonReader(reader(
|
||||
"{\"a\":123456789,\"b\":-123456789}"));
|
||||
|
|
Loading…
Reference in New Issue
Block a user