diff options
Diffstat (limited to 'formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt')
-rw-r--r-- | formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt index 7c01daa8..9cb9bb3c 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt @@ -13,6 +13,7 @@ internal class JsonTreeReader( private val lexer: AbstractJsonLexer ) { private val isLenient = configuration.isLenient + private val trailingCommaAllowed = configuration.allowTrailingComma private var stackDepth = 0 private fun readObject(): JsonElement = readObjectImpl { @@ -44,8 +45,9 @@ internal class JsonTreeReader( if (lastToken == TC_BEGIN_OBJ) { // Case of empty object lexer.consumeNextToken(TC_END_OBJ) } else if (lastToken == TC_COMMA) { // Trailing comma - lexer.fail("Unexpected trailing comma") - } + if (!trailingCommaAllowed) lexer.invalidTrailingComma() + lexer.consumeNextToken(TC_END_OBJ) + } // else unexpected token? return JsonObject(result) } @@ -66,7 +68,8 @@ internal class JsonTreeReader( if (lastToken == TC_BEGIN_LIST) { // Case of empty object lexer.consumeNextToken(TC_END_LIST) } else if (lastToken == TC_COMMA) { // Trailing comma - lexer.fail("Unexpected trailing comma") + if (!trailingCommaAllowed) lexer.invalidTrailingComma("array") + lexer.consumeNextToken(TC_END_LIST) } return JsonArray(result) } @@ -101,7 +104,7 @@ internal class JsonTreeReader( result } TC_BEGIN_LIST -> readArray() - else -> lexer.fail("Cannot begin reading element, unexpected token: $token") + else -> lexer.fail("Cannot read Json element because of unexpected ${tokenDescription(token)}") } } |