Skip to content

Commit 698f3a7

Browse files
committed
Fix #188
1 parent 4b041e9 commit 698f3a7

File tree

5 files changed

+83
-4
lines changed

5 files changed

+83
-4
lines changed

release-notes/VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ JSON library.
1919
#177: Add a check so `JsonGenerator.writeString()` won't work if `writeFieldName()` expected.
2020
#182: Inconsistent TextBuffer#getTextBuffer behavior
2121
(contributed by Masaru H)
22+
#188: `JsonParser.getValueAsString()` should return field name for `JsonToken.FIELD_NAME`, not `null`
2223
- Minor improvement to construction of "default PrettyPrinter": now overridable by data format
2324
modules
2425
- Implement a new yet more optimized symbol table for byte-backed parsers

src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -389,15 +389,22 @@ public String getValueAsString() throws IOException {
389389
if (_currToken == JsonToken.VALUE_STRING) {
390390
return getText();
391391
}
392+
if (_currToken == JsonToken.FIELD_NAME) {
393+
return getCurrentName();
394+
}
392395
return getValueAsString(null);
393396
}
394397

395398
@Override
396399
public String getValueAsString(String defaultValue) throws IOException {
397-
if (_currToken != JsonToken.VALUE_STRING) {
398-
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
399-
return defaultValue;
400-
}
400+
if (_currToken == JsonToken.VALUE_STRING) {
401+
return getText();
402+
}
403+
if (_currToken == JsonToken.FIELD_NAME) {
404+
return getCurrentName();
405+
}
406+
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
407+
return defaultValue;
401408
}
402409
return getText();
403410
}

src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java

+6
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ public final String getValueAsString() throws IOException
250250
}
251251
return _textBuffer.contentsAsString();
252252
}
253+
if (_currToken == JsonToken.FIELD_NAME) {
254+
return getCurrentName();
255+
}
253256
return super.getValueAsString(null);
254257
}
255258

@@ -263,6 +266,9 @@ public final String getValueAsString(String defValue) throws IOException {
263266
}
264267
return _textBuffer.contentsAsString();
265268
}
269+
if (_currToken == JsonToken.FIELD_NAME) {
270+
return getCurrentName();
271+
}
266272
return super.getValueAsString(defValue);
267273
}
268274

src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java

+6
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@ public String getValueAsString() throws IOException
302302
}
303303
return _textBuffer.contentsAsString();
304304
}
305+
if (_currToken == JsonToken.FIELD_NAME) {
306+
return getCurrentName();
307+
}
305308
return super.getValueAsString(null);
306309
}
307310

@@ -316,6 +319,9 @@ public String getValueAsString(String defValue) throws IOException
316319
}
317320
return _textBuffer.contentsAsString();
318321
}
322+
if (_currToken == JsonToken.FIELD_NAME) {
323+
return getCurrentName();
324+
}
319325
return super.getValueAsString(defValue);
320326
}
321327

src/test/java/com/fasterxml/jackson/core/json/TestJsonParser.java

+59
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fasterxml.jackson.core.json;
22

33
import com.fasterxml.jackson.core.*;
4+
import com.fasterxml.jackson.core.util.JsonParserDelegate;
45

56
import java.io.*;
67
import java.net.URL;
@@ -510,7 +511,65 @@ private void _testHandlingOfInvalidSpaceFromResource(boolean useStream) throws E
510511
}
511512
jp.close();
512513
}
514+
515+
public void testGetValueAsTextBytes() throws Exception
516+
{
517+
JsonFactory f = new JsonFactory();
518+
_testGetValueAsText(f, true, false);
519+
_testGetValueAsText(f, true, true);
520+
}
521+
522+
public void testGetValueAsTextChars() throws Exception
523+
{
524+
JsonFactory f = new JsonFactory();
525+
_testGetValueAsText(f, false, false);
526+
_testGetValueAsText(f, false, true);
527+
}
513528

529+
@SuppressWarnings("resource")
530+
private void _testGetValueAsText(JsonFactory f,
531+
boolean useBytes, boolean delegate) throws Exception
532+
{
533+
String JSON = "{\"a\":1,\"b\":true,\"c\":null,\"d\":\"foo\"}";
534+
JsonParser p = useBytes ? f.createParser(JSON.getBytes("UTF-8"))
535+
: f.createParser(JSON);
536+
537+
if (delegate) {
538+
p = new JsonParserDelegate(p);
539+
}
540+
541+
assertToken(JsonToken.START_OBJECT, p.nextToken());
542+
assertNull(p.getValueAsString());
543+
544+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
545+
assertEquals("a", p.getText());
546+
assertEquals("a", p.getValueAsString());
547+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
548+
assertEquals("1", p.getValueAsString());
549+
550+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
551+
assertEquals("b", p.getValueAsString());
552+
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
553+
assertEquals("true", p.getValueAsString());
554+
555+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
556+
assertEquals("c", p.getValueAsString());
557+
assertToken(JsonToken.VALUE_NULL, p.nextToken());
558+
// null token returned as Java null, as per javadoc
559+
assertNull(p.getValueAsString());
560+
561+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
562+
assertEquals("d", p.getValueAsString());
563+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
564+
assertEquals("foo", p.getValueAsString());
565+
566+
assertToken(JsonToken.END_OBJECT, p.nextToken());
567+
assertNull(p.getValueAsString());
568+
569+
assertNull(p.nextToken());
570+
p.close();
571+
}
572+
514573
/*
515574
/**********************************************************
516575
/* Helper methods

0 commit comments

Comments
 (0)