fiz
fiz

Reputation: 936

QJson for Linux - Unsure How to Use QJSON Correctly

Some Background

Originally made a project on mac, now I want to use my Linux machine for the same project. The settings folder relied on:

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

These weren't included in my qt-devel install for SL5 - it uses QT v4. So I downloaded QJson from Sourceforge and installed using cmake. Some example output:

--Installing: /usr/include/qjson/parser.h
--Installing /usr/lib/libqjson.so

That's fine. So I added to my .pro:

LIBS += -L/usr/lib/ -lqjson
INCLUDEPATH += /usr/include/qjson/

The Actual Problem

Now I have the task of translating my old settings.cpp file to parse data in this slightly new method.

{
  "HwDescription": {
    "ConnectionsName": "file://settings/connections.xml",
    "ShelveId": 0,
    "BeBoard": {
      "Id": 10,
      "connectionId": "board0",
      "boardType": "GLIB"
    }, // + more boring stuff

So now I have this json above in a QString, just as I did for my old working method, then I try to parse as per the instructions given to me. I used: #include <qjson/parser.h> and I don't think I need any forward declarations here.

    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);
    }

The error I get:

error: no matching function to call to 'Qjson::Parser:parse(QString&, bool)

If I remove the include, the error says:

QJson has not been declared

So it must be finding the libraries at least. Any ideas on what's going wrong?

Upvotes: 0

Views: 1625

Answers (1)

Luke Dupin
Luke Dupin

Reputation: 2305

Comments aren't parsed by default in QJson.

Here is a small adaptation I made on my QJson logic to handle comments. Notice the simple Regex to remove comments.

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;
}

Upvotes: 1

Related Questions