1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Update JsonCPP to 1.8.3 (#6466)

* Update JsonCPP to 1.8.3

* Fix deprecated functions

Json::FastWriter, Json::StyledWriter and Json::Reader are marked deprecated since 1.1 and are deprecated in 0.8 but not shown at compilation time.

Use new methods to serialize/deserialize
This commit is contained in:
Loïc Blot 2017-09-26 20:30:14 +02:00 committed by GitHub
parent f7e57a0d20
commit 50423d8c72
10 changed files with 549 additions and 103 deletions

View file

@ -46,12 +46,15 @@ Json::Value fetchJsonValue(const std::string &url,
return Json::Value();
}
Json::Value root;
Json::Reader reader;
std::istringstream stream(fetch_result.data);
if (!reader.parse(stream, root)) {
Json::CharReaderBuilder builder;
builder.settings_["collectComments"] = false;
std::string errs;
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
errorstream << "URL: " << url << std::endl;
errorstream << "Failed to parse json data " << reader.getFormattedErrorMessages();
errorstream << "Failed to parse json data " << errs << std::endl;
if (fetch_result.data.size() > 100) {
errorstream << "Data (" << fetch_result.data.size()
<< " bytes) printed to warningstream." << std::endl;
@ -64,3 +67,13 @@ Json::Value fetchJsonValue(const std::string &url,
return root;
}
std::string fastWriteJson(const Json::Value &value)
{
std::ostringstream oss;
Json::StreamWriterBuilder builder;
builder["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(value, &oss);
return oss.str();
}

View file

@ -23,3 +23,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Json::Value fetchJsonValue(const std::string &url,
std::vector<std::string> *extra_headers);
std::string fastWriteJson(const Json::Value &value);

View file

@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "subgame.h"
#include "settings.h"
#include "porting.h"
#include "convert_json.h"
static bool parseDependsLine(std::istream &is,
std::string &dep, std::set<char> &symbols)
@ -374,7 +375,7 @@ bool ModMetadata::save(const std::string &root_path)
}
bool w_ok = fs::safeWriteToFile(root_path + DIR_DELIM + m_mod_name,
Json::FastWriter().write(json));
fastWriteJson(json));
if (w_ok) {
m_modified = false;
@ -393,11 +394,14 @@ bool ModMetadata::load(const std::string &root_path)
return false;
}
Json::Reader reader;
Json::Value root;
if (!reader.parse(is, root)) {
Json::CharReaderBuilder builder;
builder.settings_["collectComments"] = false;
std::string errs;
if (!Json::parseFromStream(builder, is, &root, &errs)) {
errorstream << "ModMetadata[" << m_mod_name << "]: failed read data "
"(Json decoding failure)." << std::endl;
"(Json decoding failure). Message: " << errs << std::endl;
return false;
}

View file

@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "porting.h" // strlcpy
#include "server.h"
#include "settings.h"
#include "convert_json.h"
/*
RemotePlayer
@ -76,8 +77,8 @@ void RemotePlayer::serializeExtraAttributes(std::string &output)
json_root[attr.first] = attr.second;
}
Json::FastWriter writer;
output = writer.write(json_root);
output = fastWriteJson(json_root);
m_sao->setExtendedAttributeModified(false);
}
@ -120,9 +121,13 @@ void RemotePlayer::deSerialize(std::istream &is, const std::string &playername,
try {
const std::string &extended_attributes = args.get("extended_attributes");
Json::Reader reader;
std::istringstream iss(extended_attributes);
Json::CharReaderBuilder builder;
builder.settings_["collectComments"] = false;
std::string errs;
Json::Value attr_root;
reader.parse(extended_attributes, attr_root);
Json::parseFromStream(builder, iss, &attr_root, &errs);
const Json::Value::Members attr_list = attr_root.getMemberNames();
for (const auto &it : attr_list) {

View file

@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <json/json.h>
#include "cpp_api/s_security.h"
#include "porting.h"
#include "convert_json.h"
#include "debug.h"
#include "log.h"
#include "tool.h"
@ -95,12 +96,14 @@ int ModApiUtil::l_parse_json(lua_State *L)
Json::Value root;
{
Json::Reader reader;
std::istringstream stream(jsonstr);
if (!reader.parse(stream, root)) {
errorstream << "Failed to parse json data "
<< reader.getFormattedErrorMessages();
Json::CharReaderBuilder builder;
builder.settings_["collectComments"] = false;
std::string errs;
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
errorstream << "Failed to parse json data " << errs << std::endl;
size_t jlen = strlen(jsonstr);
if (jlen > 100) {
errorstream << "Data (" << jlen
@ -145,11 +148,9 @@ int ModApiUtil::l_write_json(lua_State *L)
std::string out;
if (styled) {
Json::StyledWriter writer;
out = writer.write(root);
out = root.toStyledString();
} else {
Json::FastWriter writer;
out = writer.write(root);
out = fastWriteJson(root);
}
lua_pushlstring(L, out.c_str(), out.size());
return 1;

View file

@ -185,8 +185,8 @@ const std::string serializeJson(const std::vector<ServerListSpec> &serverlist)
list.append(it);
}
root["list"] = list;
Json::FastWriter writer;
return writer.write(root);
return fastWriteJson(root);
}
@ -249,10 +249,9 @@ void sendAnnounce(AnnounceAction action,
server["lag"] = lag;
}
Json::FastWriter writer;
HTTPFetchRequest fetch_request;
fetch_request.url = g_settings->get("serverlist_url") + std::string("/announce");
fetch_request.post_fields["json"] = writer.write(server);
fetch_request.post_fields["json"] = fastWriteJson(server);
fetch_request.multipart = true;
httpfetch_async(fetch_request);
}