QJson-趟过的各种坑【先坑后用法】
- Chapter1 QJson-趟过的各种坑【先坑后用法】
- 一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge
- 二、json格式化输出
- 1.构建json
- 2.解析json
- rapidjson
QJsonDocument::Compact的作用
一、主要作用:压缩JSON对象中的空格和换行符,对于接收端只解析其的一部分时非常有用,因为部分解析就是只解析json字符串的一部分,那么这一部分就需要截取,当JSON字符串中存在长度不固定的空格和换行符时,截取位置就不好定义,因为没有规律可寻,使用了这个参数后就能够有效解决这个问题。
二、使用方法:
QJsonObject dataobj;//构建json对象dataobj
dataobj.insert("data",QJsonValue(allquerydata));QJsonDocument document;
document.setObject(dataobj);
QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact);
QString simpjson_str(simpbyte_array);
Chapter1 QJson-趟过的各种坑【先坑后用法】
原文链接:https://blog.csdn.net/Carry_Qt/article/details/88867537
一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge
解决办法: 用rapidjson。
二、json格式化输出
解决办法: QByteArraydata = document.toJson(QJsonDocument::Compact);
QJson使用
#include <QJsonObject>#include <QJsonParseError>#include <QJsonArray>
1.构建json
QJsonObject json;json.insert("Name", "Qt");json.insert("From", 1991);json.insert("Cross Platform", true);QJsonDocument document;document.setObject(json);QByteArray byteArray = document.toJson(QJsonDocument::Compact);
2.解析json
QFile file(jsonFilePath);if (!file.open(QIODevice::ReadOnly)){qDebug()<<u8"读取json文件出错";return;}QByteArray data = file.readAll();file.close();QJsonParseError jsonpe;QJsonDocument jsonDocument = QJsonDocument::fromJson(data, &jsonpe);if (jsonpe.error == QJsonParseError::NoError){if (jsonDocument.isObject()){QJsonObject obj = jsonDocument.object();if(obj.contains("created")){QJsonValue value = obj.take("created");if(value.isBool()){bool m_created = value.toBool();if(m_created == true){//处理}}}}}else{QString errorStr = jsonpe.errorString();}
rapidjson
rapidjson是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。rapidjson的性能也非常出色。
各大json库性能测试: jsoncpp和rapidjson哪个好用? - 知乎