QJson for Linux - Не знаете, как правильно использовать QJSON

0

Некоторые предпосылки

Первоначально созданный проект на Mac, теперь я хочу использовать свою Linux-машину для того же проекта. Папка настроек основывалась на:

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

Они не были включены в мою установку qt-devel для SL5 - она использует QT v4. Поэтому я загрузил QJson из 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

Итак, теперь у меня есть этот json выше в QString, как и для моего старого рабочего метода, затем я пытаюсь разобрать в соответствии с инструкциями, данными мне. Я использовал: #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);
    }

Ошибка, которую я получаю:

error: никакой подходящей функции для вызова "Qjson :: Parser: parse (QString &, bool)

Если я удалю включение, ошибка говорит:

QJson не был объявлен

Поэтому, по крайней мере, нужно найти библиотеки. Любые идеи о том, что происходит не так?

  • 0
    Если вы посмотрите на QJson::Parser , вы увидите, что нет перегрузки parse который принимает QString& качестве аргумента.
  • 0
    Я следовал за учебником. Есть ли лучшая библиотека, чем эта? Это было намного проще на Mac
Показать ещё 4 комментария
Теги:
qt
qjson

1 ответ

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;
}
  • 0
    Это не работает для меня? - Я не могу использовать QJsonParseError, поскольку он включен в QT v5, а я использую v4 - по этой причине я установил QJson. Разве это не в той библиотеке где-нибудь?
  • 0
    Также этому парню не нужно регулярное выражение: qjson.sourceforge.net/usage

Ещё вопросы

Сообщество Overcoder
Наверх
Меню