Add Json::parseUntilMalformed helper
Signed-off-by: Dylan Schooner <dschooner05@gmail.com>
This commit is contained in:
@@ -101,6 +101,17 @@ QJsonArray requireArray(const QJsonDocument& doc, const QString& what)
|
|||||||
return doc.array();
|
return doc.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QJsonDocument parseUntilMalformed(const QByteArray& json, QJsonParseError* error)
|
||||||
|
{
|
||||||
|
auto doc = QJsonDocument::fromJson(json, error);
|
||||||
|
if (error->error != QJsonParseError::NoError) {
|
||||||
|
QByteArray validJson = json.left(error->offset);
|
||||||
|
doc = QJsonDocument::fromJson(validJson, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
void writeString(QJsonObject& to, const QString& key, const QString& value)
|
void writeString(QJsonObject& to, const QString& key, const QString& value)
|
||||||
{
|
{
|
||||||
if (!value.isEmpty()) {
|
if (!value.isEmpty()) {
|
||||||
|
|||||||
@@ -107,6 +107,9 @@ QJsonArray toJsonArray(const QList<T>& container)
|
|||||||
|
|
||||||
////////////////// READING ////////////////////
|
////////////////// READING ////////////////////
|
||||||
|
|
||||||
|
// Attempt to parse JSON up until unexpected data is encountered
|
||||||
|
QJsonDocument parseUntilMalformed(const QByteArray& json, QJsonParseError* error = nullptr);
|
||||||
|
|
||||||
/// @throw JsonException
|
/// @throw JsonException
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T requireIsType(const QJsonValue& value, const QString& what = "Value");
|
T requireIsType(const QJsonValue& value, const QString& what = "Value");
|
||||||
|
|||||||
@@ -169,15 +169,9 @@ bool processZIP(DataPack* pack, ProcessingLevel level)
|
|||||||
bool processMCMeta(DataPack* pack, QByteArray&& raw_data)
|
bool processMCMeta(DataPack* pack, QByteArray&& raw_data)
|
||||||
{
|
{
|
||||||
QJsonParseError parse_error;
|
QJsonParseError parse_error;
|
||||||
auto json_doc = QJsonDocument::fromJson(raw_data, &parse_error);
|
auto json_doc = Json::parseUntilMalformed(raw_data, &parse_error);
|
||||||
if (parse_error.error != QJsonParseError::NoError) {
|
if (parse_error.error != QJsonParseError::NoError) {
|
||||||
QByteArray validJson = raw_data.left(parse_error.offset);
|
qWarning() << "Failed to parse JSON:" << parse_error.errorString();
|
||||||
json_doc = QJsonDocument::fromJson(validJson, &parse_error);
|
|
||||||
|
|
||||||
if (parse_error.error != QJsonParseError::NoError) {
|
|
||||||
qWarning() << "Failed to parse JSON:" << parse_error.errorString();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user