diff --git a/api/audio/echo_canceller3_config_json.cc b/api/audio/echo_canceller3_config_json.cc index 91a3c66d33..263599c538 100644 --- a/api/audio/echo_canceller3_config_json.cc +++ b/api/audio/echo_canceller3_config_json.cc @@ -11,6 +11,7 @@ #include +#include #include #include @@ -156,9 +157,14 @@ void Aec3ConfigFromJsonString(absl::string_view json_string, *parsing_successful = true; Json::Value root; - bool success = Json::Reader().parse(std::string(json_string), root); + Json::CharReaderBuilder builder; + std::string error_message; + std::unique_ptr reader(builder.newCharReader()); + bool success = + reader->parse(json_string.data(), json_string.data() + json_string.size(), + &root, &error_message); if (!success) { - RTC_LOG(LS_ERROR) << "Incorrect JSON format: " << json_string; + RTC_LOG(LS_ERROR) << "Incorrect JSON format: " << error_message; *parsing_successful = false; return; } diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 34884604e1..62b2c4d71f 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -951,9 +951,14 @@ TEST_F(RTCStatsCollectorTest, ToJsonProducesParseableJson) { ExampleStatsGraph graph = SetupExampleStatsGraphForSelectorTests(); rtc::scoped_refptr report = stats_->GetStatsReport(); std::string json_format = report->ToJson(); - Json::Reader reader; + + Json::CharReaderBuilder builder; Json::Value json_value; - ASSERT_TRUE(reader.parse(json_format, json_value)); + std::unique_ptr reader(builder.newCharReader()); + ASSERT_TRUE(reader->parse(json_format.c_str(), + json_format.c_str() + json_format.size(), + &json_value, nullptr)); + // A very brief sanity check on the result. EXPECT_EQ(report->size(), json_value.size()); } diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index c780e29669..7ea069ab37 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -637,10 +637,6 @@ rtc_library("rtc_stats_counters") { config("rtc_json_suppressions") { if (!is_win || is_clang) { cflags_cc = [ - # TODO(bugs.webrtc.org/10770): Update jsoncpp API usage and remove - # -Wno-deprecated-declarations. - "-Wno-deprecated-declarations", - # TODO(bugs.webrtc.org/10814): Remove -Wno-undef as soon as it get # removed upstream. "-Wno-undef", diff --git a/rtc_base/strings/json.cc b/rtc_base/strings/json.cc index 8a544a0c0d..99664404cf 100644 --- a/rtc_base/strings/json.cc +++ b/rtc_base/strings/json.cc @@ -286,9 +286,9 @@ bool GetDoubleFromJsonObject(const Json::Value& in, } std::string JsonValueToString(const Json::Value& json) { - Json::FastWriter w; - std::string value = w.write(json); - return value.substr(0, value.size() - 1); // trim trailing newline + Json::StreamWriterBuilder builder; + std::string output = Json::writeString(builder, json); + return output.substr(0, output.size() - 1); // trim trailing newline } } // namespace rtc diff --git a/rtc_tools/rtp_generator/rtp_generator.cc b/rtc_tools/rtp_generator/rtp_generator.cc index 3180897ec5..c2fc1cff06 100644 --- a/rtc_tools/rtp_generator/rtp_generator.cc +++ b/rtc_tools/rtp_generator/rtp_generator.cc @@ -136,10 +136,15 @@ absl::optional ParseRtpGeneratorOptionsFromFile( } // Parse the file as JSON - Json::Reader json_reader; + Json::CharReaderBuilder builder; Json::Value json; - if (!json_reader.parse(raw_json_buffer.data(), json)) { - RTC_LOG(LS_ERROR) << "Unable to parse the corpus config json file"; + std::string error_message; + std::unique_ptr json_reader(builder.newCharReader()); + if (!json_reader->parse(raw_json_buffer.data(), + raw_json_buffer.data() + raw_json_buffer.size(), + &json, &error_message)) { + RTC_LOG(LS_ERROR) << "Unable to parse the corpus config json file. Error:" + << error_message; return absl::nullopt; } diff --git a/rtc_tools/video_replay.cc b/rtc_tools/video_replay.cc index d96c7be410..b655a8816e 100644 --- a/rtc_tools/video_replay.cc +++ b/rtc_tools/video_replay.cc @@ -399,11 +399,14 @@ class RtpReplayer final { std::stringstream raw_json_buffer; raw_json_buffer << config_file.rdbuf(); std::string raw_json = raw_json_buffer.str(); - Json::Reader json_reader; + Json::CharReaderBuilder builder; Json::Value json_configs; - if (!json_reader.parse(raw_json, json_configs)) { + std::string error_message; + std::unique_ptr json_reader(builder.newCharReader()); + if (!json_reader->parse(raw_json.data(), raw_json.data() + raw_json.size(), + &json_configs, &error_message)) { fprintf(stderr, "Error parsing JSON config\n"); - fprintf(stderr, "%s\n", json_reader.getFormatedErrorMessages().c_str()); + fprintf(stderr, "%s\n", error_message.c_str()); return nullptr; } diff --git a/stats/rtc_stats_unittest.cc b/stats/rtc_stats_unittest.cc index aff6ab30bd..2cad90d02b 100644 --- a/stats/rtc_stats_unittest.cc +++ b/stats/rtc_stats_unittest.cc @@ -267,9 +267,14 @@ TEST(RTCStatsTest, RTCStatsPrintsValidJson) { stats.m_sequence_string = sequence_string; stats.m_map_string_uint64 = map_string_uint64; stats.m_map_string_double = map_string_double; + std::string json_stats = stats.ToJson(); + Json::CharReaderBuilder builder; Json::Value json_output; - EXPECT_TRUE(Json::Reader().parse(stats.ToJson(), json_output)); + std::unique_ptr json_reader(builder.newCharReader()); + EXPECT_TRUE(json_reader->parse(json_stats.c_str(), + json_stats.c_str() + json_stats.size(), + &json_output, nullptr)); EXPECT_TRUE(rtc::GetStringFromJsonObject(json_output, "id", &id)); EXPECT_TRUE(rtc::GetIntFromJsonObject(json_output, "timestamp", ×tamp));