From 3beb37ea14aec1bdce1a6d542dc464d00f4a6cec Mon Sep 17 00:00:00 2001 From: Chen <50514813+dota17@users.noreply.github.com> Date: Fri, 14 Feb 2020 05:25:08 +0800 Subject: [PATCH] revert trailing comma in old Reader (#1126) --- include/json/json_features.h | 6 ------ src/lib_json/json_reader.cpp | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/include/json/json_features.h b/include/json/json_features.h index a5b7305..7c7e9f5 100644 --- a/include/json/json_features.h +++ b/include/json/json_features.h @@ -23,7 +23,6 @@ public: /** \brief A configuration that allows all features and assumes all strings * are UTF-8. * - C & C++ comments are allowed - * - Trailing commas in objects and arrays are allowed. * - Root object can be any JSON value * - Assumes Value strings are encoded in UTF-8 */ @@ -32,7 +31,6 @@ public: /** \brief A configuration that is strictly compatible with the JSON * specification. * - Comments are forbidden. - * - Trailing commas in objects and arrays are forbidden. * - Root object must be either an array or an object value. * - Assumes Value strings are encoded in UTF-8 */ @@ -45,10 +43,6 @@ public: /// \c true if comments are allowed. Default: \c true. bool allowComments_{true}; - /// \c true if trailing commas in objects and arrays are allowed. Default \c - /// true. - bool allowTrailingCommas_{true}; - /// \c true if root must be either an array or an object value. Default: \c /// false. bool strictRoot_{false}; diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp index 2c6fead..10be6d2 100644 --- a/src/lib_json/json_reader.cpp +++ b/src/lib_json/json_reader.cpp @@ -67,7 +67,6 @@ Features Features::all() { return {}; } Features Features::strictMode() { Features features; features.allowComments_ = false; - features.allowTrailingCommas_ = false; features.strictRoot_ = true; features.allowDroppedNullPlaceholders_ = false; features.allowNumericKeys_ = false; @@ -455,9 +454,7 @@ bool Reader::readObject(Token& token) { initialTokenOk = readToken(tokenName); if (!initialTokenOk) break; - if (tokenName.type_ == tokenObjectEnd && - (name.empty() || - features_.allowTrailingCommas_)) // empty object or trailing comma + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object return true; name.clear(); if (tokenName.type_ == tokenString) { @@ -505,20 +502,15 @@ bool Reader::readArray(Token& token) { Value init(arrayValue); currentValue().swapPayload(init); currentValue().setOffsetStart(token.start_ - begin_); + skipSpaces(); + if (current_ != end_ && *current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } int index = 0; for (;;) { - skipSpaces(); - if (current_ != end_ && *current_ == ']' && - (index == 0 || - (features_.allowTrailingCommas_ && - !features_.allowDroppedNullPlaceholders_))) // empty array or trailing - // comma - { - Token endArray; - readToken(endArray); - return true; - } - Value& value = currentValue()[index++]; nodes_.push(&value); bool ok = readValue();