QT4 第三方QJson的使用
2017-03-18 本文已影响0人
QingLinger
说在前面:本篇不介绍Json基本知识,请自行了解。
- 下载第三方的QJson,备用Github链接。
-
解压,复制里面的src文件夹到项目上。
linger@linger-virtual-machine:~/install$ unzip ./qjson-master.zip
linger@linger-virtual-machine:~/install$ cp qjson-master/src/ ~/test/test -rf
-
加入文件,编译,运行
-
修改json_scanner.h和json_scanner.cc文件,把<FlexLexer.h>改为"FlexLexer.h"。
-
因为要用到QVariantMap,所以在.pro加上network,工程加入QtNetwork。
-
加入parser.h,写上代码,编译,运行。
官方使用方法参考:usage-QJson;中文翻译参考:Qt 学习之路 2(63):使用 QJson 处理 JSON。
QJson::Parser parser;
bool ok;QString json("{" "\"encoding\" : \"UTF-8\"," "\"plug-ins\" : [" "\"python\"," "\"c++\"," "\"ruby\"" "]," "\"indent\" : { \"length\" : 3, \"use_space\" : true }" "}"); QVariantMap result = parser.parse(json.toUtf8(), &ok).toMap(); if (!ok) { qFatal("An error occurred during parsing"); exit (1); } qDebug() << "encoding:" << result["encoding"].toString(); qDebug() << "plugins:"; foreach (QVariant plugin, result["plug-ins"].toList()) { qDebug() << "\t-" << plugin.toString(); } QVariantMap nestedMap = result["indent"].toMap(); qDebug() << "length:" << nestedMap["length"].toInt(); qDebug() << "use_space:" << nestedMap["use_space"].toBool();
-
完成。
另外的说明:
-
发生下图错误,说明.cpp或.so没有链接上.h,就是有声明没实现,需要编译一下,解决方法就是上面那样。
- 生成系统动态链接库。
我不会,别问我。
官方编译方法参考:Build-QJson。我参考了运行了下还是报错说没有编译,就是上面说的那个错误,有人弄好了求赐教。
linger@linger-virtual-machine:~$ cd install/qjson-master/
linger@linger-virtual-machine:~/install/qjson-master$ vim README.md
linger@linger-virtual-machine:~/install/qjson-master$ mkdir build
linger@linger-virtual-machine:~/install/qjson-master$ cd build/
linger@linger-virtual-machine:~/install/qjson-master/build$ cmake -DCMAKE_INSTALL_PREFIX=preferred_path ..
linger@linger-virtual-machine:~/install/qjson-master/build$ sudo su
root@linger-virtual-machine:/home/linger/install/qjson-master/build# make && make install