想在软件上添加个配置文件, .ini 使用起来简单易用,就目前我手里的项目来说也是够用的了。网上说.ini“只支持键值模式,而且只有一层分类,无嵌套”, 当然这看人怎么用了。只要我愿意可以用出无限级(此处忽略.ini文件的最大64k限制)。之所以放弃.ini文件作为配置是因为想要实现复杂的嵌套结构需要订自己的规则,以及编写相应的解析代码。最大麻烦就是64k限制了,可能一个软件要搞好几个ini文件……
之前也做过xml的配置,但是看看网上的介绍,xml瞬间low了很多。感觉xml做配置都已经成了历史遗留问题了……
再看看现在的许多软件,例如微信小程序编辑器,vscode、等等,上面的配置都使用json。虽然吧对json不熟悉,但想必其作为配置方面优越性必定高于xml
所以,基于上面方面原因跟下潮流用json。因此就耗了一天时间在QJson 和 jsoncpp两个源码编译上。jsoncpp没编译成功,由于最新版本需要c++11支持。我arm的编译器最大就支持c++0x,试了编译不过就放弃了
QJson简介
QJson为第三方库,非Qt自带库。那为啥不用qt自带库呢?不为啥,因为我的项目里面用的是Qt4.8.5的还不支持Json解析。Qt5后才支持的。
QJson的编译
方法一:编译成库
qjson.7z下载
编译成库的例子网上有很多,但多是用cMake编译的,这里就不多赘述了。既然QJson是为Qt提供的第三方库,那能不能直接通过创建qt工程之际编译?答案是肯定的。在qjson目录下创建qt工程:
qjson.pro内容如下:
TARGET = qjson
TEMPLATE = lib
CONFIG += shared
CONFIG += dll
#QMAKE_CXXFLAGS += -fexceptions
CONFIG += exceptions
DEFINES += QJSON_MAKEDLL
INCLUDEPATH += ./include/QJson/
INCLUDEPATH += ./src/
SOURCES += \
src/serializerrunnable.cpp \
src/serializer.cpp \
src/qobjecthelper.cpp \
src/parserrunnable.cpp \
src/parser.cpp \
src/json_scanner.cpp \
src/json_scanner.cc \
src/json_parser.cc
HEADERS +=\
src/serializerrunnable.h \
src/serializer.h \
src/qobjecthelper.h \
src/qjson_export.h \
src/qjson_debug.h \
src/parserrunnable.h \
src/parser_p.h \
src/parser.h \
src/json_scanner.h \
src/FlexLexer.h \
src/stack.hh \
src/position.hh \
src/location.hh \
src/json_parser.hh \
include/QJson/Parser \
include/QJson/QObjectHelper \
include/QJson/Serializer \
src/json_scanner.yy \
src/json_parser.yy
用qt creator打开直接编译即可
方法二:直接在工程里面加入源码
跨不同平台的还要编译多个库太麻烦了,既然有源码直接加入工程不是更方便吗,反正这库也不大。
在qjson文件夹下创建个qjson.pri文件:
qjson.pri内容如下:
INCLUDEPATH += $$PWD/qjson/src/
INCLUDEPATH += $$PWD/qjson/include/QJson
#DEFINES += QJSON_MAKEDLL
#CONFIG += exceptions
QMAKE_CXXFLAGS = -std=c++0x
unix {
}
HEADERS += \
$$PWD/qjson/src/json_parser.hh \
$$PWD/qjson/src/location.hh \
$$PWD/qjson/src/position.hh \
$$PWD/qjson/src/stack.hh \
$$PWD/qjson/src/FlexLexer.h \
$$PWD/qjson/src/json_scanner.h \
$$PWD/qjson/src/parser.h \
$$PWD/qjson/src/parser_p.h \
$$PWD/qjson/src/parserrunnable.h \
$$PWD/qjson/src/qjson_debug.h \
$$PWD/qjson/src/qjson_export.h \
$$PWD/qjson/src/qobjecthelper.h \
$$PWD/qjson/src/serializer.h \
$$PWD/qjson/src/serializerrunnable.h \
$$PWD/qjson/include/QJson/Parser \
$$PWD/qjson/include/QJson/QObjectHelper \
$$PWD/qjson/include/QJson/Serializer
SOURCES += \
$$PWD/qjson/src/json_scanner.cpp \
$$PWD/qjson/src/parser.cpp \
$$PWD/qjson/src/parserrunnable.cpp \
$$PWD/qjson/src/qobjecthelper.cpp \
$$PWD/qjson/src/serializer.cpp \
$$PWD/qjson/src/serializerrunnable.cpp \
$$PWD/qjson/src/json_scanner.cc \
$$PWD/qjson/src/json_parser.cc
主工程里面用include()将所需要的pri文件包含就来就ok了