Skip to content

Commit 6599f9f

Browse files
committed
Change String collections to use JsonParser.nextTextValue()
1 parent 0d60ab4 commit 6599f9f

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,18 @@ public String[] deserialize(JsonParser jp, DeserializationContext ctxt) throws I
5454
Object[] chunk = buffer.resetAndStart();
5555

5656
int ix = 0;
57-
JsonToken t;
5857

5958
try {
60-
while ((t = jp.nextToken()) != JsonToken.END_ARRAY) {
61-
// Ok: no need to convert Strings, but must recognize nulls
62-
String value;
63-
if (t == JsonToken.VALUE_STRING) {
64-
value = jp.getText();
65-
} else if (t == JsonToken.VALUE_NULL) {
66-
value = null; // since we have established that '_elementDeserializer == null' earlier
67-
} else {
68-
value = _parseString(jp, ctxt);
59+
while (true) {
60+
String value = jp.nextTextValue();
61+
if (value == null) {
62+
JsonToken t = jp.getCurrentToken();
63+
if (t == JsonToken.END_ARRAY) {
64+
break;
65+
}
66+
if (t != JsonToken.VALUE_NULL) {
67+
value = _parseString(jp, ctxt);
68+
}
6969
}
7070
if (ix >= chunk.length) {
7171
chunk = buffer.appendCompletedChunk(chunk);

src/main/java/com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,19 @@ public Collection<String> deserialize(JsonParser jp, DeserializationContext ctxt
173173
if (_valueDeserializer != null) {
174174
return deserializeUsingCustom(jp, ctxt, result, _valueDeserializer);
175175
}
176-
JsonToken t;
177-
178176
try {
179-
while ((t = jp.nextToken()) != JsonToken.END_ARRAY) {
180-
String value;
181-
if (t == JsonToken.VALUE_STRING) {
182-
value = jp.getText();
183-
} else if (t == JsonToken.VALUE_NULL) {
184-
value = null;
185-
} else {
177+
while (true) {
178+
// First the common case:
179+
String value = jp.nextTextValue();
180+
if (value != null) {
181+
result.add(value);
182+
continue;
183+
}
184+
JsonToken t = jp.getCurrentToken();
185+
if (t == JsonToken.END_ARRAY) {
186+
break;
187+
}
188+
if (t != JsonToken.VALUE_NULL) {
186189
value = _parseString(jp, ctxt);
187190
}
188191
result.add(value);

0 commit comments

Comments
 (0)