QJsondocument提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、pandas是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
前言
当前项目需要将大量结构体数据转换为json格式存储,此处我选择xpack(https://gitee.com/xyz347/xpack#基本用法),下载链接和使用方法原作者讲的足够清楚,因此不再赘述。我在使用过程主要是数据存储过程发现中文乱码。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas是什么?
*.h文件
#include "xpack/json.h"using namespace std;struct LonLat_Struct{ double dLon; double dLat; double dAlt; XPACK(O(dLon, dLat, dAlt));};struct City_Struct{ char qName[30]; LonLat_Struct llS; XPACK(O(qName, llS));}; *.cpp
struct转json格式string
QString str, str2; QVectorcsVec; City_Struct cs, cs2; QByteArray a = QString::fromLocal8Bit("武汉").toLocal8Bit(); memcpy(cs.qName, a.data(), a.size()); cs.llS.dLon = 112; cs.llS.dLat = 32; cs.llS.dAlt = 300; csVec.append(cs); //注意此处直接使用QString::fromStdString会乱码 str = QString::fromLocal8Bit(xpack::json::encode(cs).c_str()); QJsonParseError jsonError; QJsonArray jsonArray; //此处注意QJsondocument::fromJson返回为null大部分使用为编码格式问题,utf8 QJsondocument d = QJsondocument::fromJson(str.toUtf8()); QJsonObject j1 = d.object(); jsonArray.append(j1); a = QString::fromLocal8Bit("黄冈").toLocal8Bit(); memcpy(cs2.qName, a.data(), a.size()); cs2.llS.dLon = 112.8; cs2.llS.dLat = 32.3; cs2.llS.dAlt = 400; csVec.append(cs2); str2 = QString::fromLocal8Bit(xpack::json::encode(cs2).c_str()); jsonArray.append(QJsondocument::fromJson(str2.toUtf8()).object()); QJsondocument document; document.setArray(jsonArray); byte = QString::fromUtf8(document.toJson(QJsondocument::Compact));
string解析转struct
QVectorcsVec; QJsondocument document = QJsondocument::fromJson(byte.toUtf8()); QJsonArray jsonArray = document.array(); int size = jsonArray.size(); for each (QJsonValue var in jsonArray) { City_Struct cs; QString str = QJsondocument(var.toObject()).toJson(); //注意此处同样QString转string xpack::json::decode(string(str.toLocal8Bit()), cs); csVec.append(cs); }
总结
本文出现中文乱码看似需要分析的地方比较多,实际如果我们按照xpack说明和熟悉qt json的使用方法后,基本可以确认问题是在QString和std::string互转过程出现。



