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 {
|
public void skipValue() throws IOException {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
do {
|
do {
|
||||||
int p = doPeek();
|
int p = peeked;
|
||||||
|
if (p == PEEKED_NONE) {
|
||||||
|
p = doPeek();
|
||||||
|
}
|
||||||
|
|
||||||
if (p == PEEKED_BEGIN_ARRAY) {
|
if (p == PEEKED_BEGIN_ARRAY) {
|
||||||
push(JsonScope.EMPTY_ARRAY);
|
push(JsonScope.EMPTY_ARRAY);
|
||||||
count++;
|
count++;
|
||||||
|
@ -71,6 +71,38 @@ public final class JsonReaderTest extends TestCase {
|
|||||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
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 {
|
public void testSkipObject() throws IOException {
|
||||||
JsonReader reader = new JsonReader(reader(
|
JsonReader reader = new JsonReader(reader(
|
||||||
"{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}"));
|
"{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}"));
|
||||||
@ -83,6 +115,23 @@ public final class JsonReaderTest extends TestCase {
|
|||||||
assertEquals(JsonToken.END_DOCUMENT, reader.peek());
|
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 {
|
public void testSkipInteger() throws IOException {
|
||||||
JsonReader reader = new JsonReader(reader(
|
JsonReader reader = new JsonReader(reader(
|
||||||
"{\"a\":123456789,\"b\":-123456789}"));
|
"{\"a\":123456789,\"b\":-123456789}"));
|
||||||
|
Loading…
Reference in New Issue
Block a user