Linux版QJson-不确定如何正确使用QJson



一些背景

最初在mac上做了一个项目,现在我想用我的Linux机器来做同样的项目。所依赖的设置文件夹:

#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonParseError>

这些并没有包含在我为SL5安装的qt-devel中——它使用的是qtv4。所以我从Sourceforge下载了QJson,并使用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&,bool)

如果我删除include,错误显示:

QJson尚未被宣布

所以它至少要找到图书馆。有什么问题吗?

默认情况下,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;
}

最新更新