Linux版QJson-不确定如何正确使用QJson
QJson for Linux - Unsure How to Use QJSON Correctly
一些背景
最初在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;
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- CMake-按正确顺序将项目与C运行时对象文件链接
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何使用用户输入在C++中正确填充2D数组
- node-gyp 在 macOS 上未正确链接库
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 为什么我的for循环不能正确获取argv
- 如何取消对nullptr的屏蔽,返回正确的对象
- AES加密到解密未正确输出
- 使用C++程序合并排序没有得到正确的输出
- 在 c++ 中拥有一组结构的正确方法是什么?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 使用2个键的cpp-stl::优先级队列排序不正确
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 在'如果'陈述输出如何正确
- Python中的for循环与C++有何不同
- Linux版QJson-不确定如何正确使用QJson