一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge
解决办法: 用rapidjson。
二、json格式化输出
解决办法: QByteArraydata = document.toJson(QJsonDocument::Compact);
QJsonDocument::Indented | { "Array": [ true, 999, "string" ], "Key": "Value", "null": null } |
QJsonDocument::Compact | {"Array":[true,999,"string"],"Key":"Value","null":null} |
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonArray>
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);
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是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。rapidjson的性能也非常出色。
各大json库性能测试: jsoncpp和rapidjson哪个好用? - 知乎
官方教程: RapidJSON: 教程