//project include #include // util includes #include //qt includes #include #include #include namespace JsonUtils { bool readFile(const QString& path, QJsonObject& obj, Logger* log, bool ignError) { QString data; if(!FileUtils::readFile(path, data, log, ignError)) return false; if(!parse(path, data, obj, log)) return false; return true; } bool readSchema(const QString& path, QJsonObject& obj, Logger* log) { QJsonObject schema; if(!readFile(path, schema, log)) return false; if(!resolveRefs(schema, obj, log)) return false; return true; } bool parse(const QString& path, const QString& data, QJsonObject& obj, Logger* log) { QJsonDocument doc; if(!parse(path, data, doc, log)) return false; obj = doc.object(); return true; } bool parse(const QString& path, const QString& data, QJsonArray& arr, Logger* log) { QJsonDocument doc; if(!parse(path, data, doc, log)) return false; arr = doc.array(); return true; } bool parse(const QString& path, const QString& data, QJsonDocument& doc, Logger* log) { //remove Comments in data QString cleanData = data; //cleanData .remove(QRegularExpression("([^:]?\\/\\/.*)")); QJsonParseError error; doc = QJsonDocument::fromJson(cleanData.toUtf8(), &error); if (error.error != QJsonParseError::NoError) { // report to the user the failure and their locations in the document. int errorLine(0), errorColumn(0); for( int i=0, count=qMin( error.offset,cleanData.size()); i