最初在mac上创建了一个项目,现在我想将我的Linux机器用于同一个项目。设置文件夹依赖于:
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonParseError>
这些不包含在我的SL5的qt-devel安装中 - 它使用QT v4。所以我下载了QJson from Sourceforge并使用cmake安装。一些示例输出:
--Installing: /usr/include/qjson/parser.h
--Installing /usr/lib/libqjson.so
没关系。所以我加入了我的.pro:
LIBS += -L/usr/lib/ -lqjson
INCLUDEPATH += /usr/include/qjson/
现在,我的任务是翻译旧的settings.cpp
文件,以便用这种稍微新的方法解析数据。
{
"HwDescription": {
"ConnectionsName": "file://settings/connections.xml",
"ShelveId": 0,
"BeBoard": {
"Id": 10,
"connectionId": "board0",
"boardType": "GLIB"
}, // + more boring stuff
所以现在我在QString上面有这个json,正如我为我的旧工作方法做的那样,然后我尝试按照给我的指示进行解析。我使用了#include <qjson/parser.h>
,我认为我不需要任何前瞻声明。
QJson::Parser parser;
bool ok;
QVariantMap result = parser.parse (raw_json, &ok).toMap(); //where raw_json is a QString - this is where I get an error
if (!ok)
{
qFatal("An error occured during parsing");
exit (1);
}
我得到的错误:
错误:没有匹配函数来调用'Qjson :: Parser:parse(QString&amp;,bool)
如果我删除了包含,则错误说明:
QJson尚未宣布
所以必须至少找到这些库。关于出了什么问题的任何想法?
答案 0 :(得分:0)
在QJson中默认不解析注释。
这是我对QJson逻辑进行的一个小修改,用于处理注释。注意简单的Regex删除注释。
QFile file( filename );
//File can't be opened!
if ( !file.open( QFile::ReadOnly ) )
{
qDebug("Couldn't load config file: %s", filename.toLatin1().data());
return;
}
//Strip out comments
QStringList list = QString( file.readAll() ).split('\n');
for ( int i = 0; i < list.size(); i++ )
list[i].replace( QRegExp("//[^\"]*$"), "" );
//Load the file, converting into an object file
QJsonParseError e;
QJsonObject json =
QJsonDocument::fromJson( list.join('\n').toLatin1(), &e ).object();
//Was there an error?
if ( e.error != QJsonParseError::NoError )
{
qDebug( "Json parse error: %s", e.errorString().toLatin1().data() );
return;
}