QT自带的QJson其实应该也挺好用的,不过既然都已经开始尝试在QT里面使用jsoncpp了,就完整记录一下使用过程吧。
1.jsoncpp文件组织
下载地址:https://github.com/open-source-parsers/jsoncpp/releases
在项目根目录建立jsoncpp子目录,将jsoncpp源码压缩包里面的json文件夹和lib_json两个文件夹复制到jsoncpp目录下,最终的文件结构是这样的:
2.编写QT的配置参数文件
在jsoncpp文件夹内新建一个jsoncpp.pri文件,内容如下:
INCLUDEPATH+=$$PWD/json \
$$PWD/lib_json \
DEPENDPATH+=$$PWD/lib_json
HEADERS += \
$$PWD/json/json.h \
$$PWD/json/allocator.h \
$$PWD/json/assertions.h \
$$PWD/json/config.h \
$$PWD/json/forwards.h \
$$PWD/json/json_features.h \
$$PWD/json/reader.h \
$$PWD/json/value.h \
$$PWD/json/version.h \
$$PWD/json/writer.h \
$$PWD/lib_json/json_tool.h \
SOURCES += $$PWD/lib_json/json_reader.cpp \
$$PWD/lib_json/json_value.cpp \
$$PWD/lib_json/json_writer.cpp \
修改项目的pro文件,增加下面的这两行内容:
INCLUDEPATH +=$$PWD/jsoncpp
include($$PWD/jsoncpp/jsoncpp.pri)
然后在项目里面引用就可以了。
这里面重点提一下
INCLUDEPATH
不写INCLUDEPATH的话,jsoncpp里面的代码是找不到<json/json.h>这样带有<>的头文件的,只能挨个修改头文件,把<>去掉,改成"",加了INCLUDEPATH以后就可以正常找到带有<>的头文件了,后续其他开源代码也都是这么个意思。
3.解析json示例
bool MainWindow::parseJson(const QString jsonFile)
{
QFileInfo fileInfo(jsonFile);
if (false==fileInfo.exists()){
return false;
}
QFile laodFile(jsonFile);
if(!laodFile.open(QIODevice::ReadOnly))
{
qDebug() << "could't open projects json";
return false;
}
QByteArray allData = laodFile.readAll();
laodFile.close();
Json::Reader reader;
Json::Value root;
if (false==reader.parse(allData.data(),root)){
return false;
}else{
qDebug() << QString(root["xxx"].asString().data());
return true;
}
}