QJson-趟过的各种坑(先坑后⽤法)
⼀、不能处理⼤数据量,如果你的数据量有百兆左右(特别是有的⼩伙伴还喜欢json格式化输出的),不要⽤Qjson,否则会报错DocumentTooLarge
解决办法: ⽤rapidjson(后⾯介绍)。
⼆、QJson对⾼精度数据进⾏类型转换时不能设置⼩数位数,这会导致我们⽣成json数据的时候会出现精度丢失的情况。
解决办法:1. 这你的类型可以是string,像这种"123.123456788",字符串当然不⽤担⼼精度问题。
2.如果要求必须是数值类型的话,对不起,请舍弃Qjson 转rapidjson,rapidjson可以设置⼩数的位数。
三、json格式化输出
解决办法: QByteArraydata = Json(QJsonDocument::Compact);
QJsonDocument::Indented {
"Array": [ true,
999, "string"
],
"Key": "Value", "null": null
}
QJsonDocument::Compact{"Array":[true,999,"string"],"Key":"Value","null":null} 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 = Json(QJsonDocument::Compact);
2.解析json
QFile file(jsonFilePath);
if (!file.open(QIODevice::ReadOnly))
{
qDebug()<<u8"读取json⽂件出错";
return;
}
QByteArray data = adAll();
file.close();
phpjson格式化输出QJsonParseError jsonpe;
QJsonDocument jsonDocument = QJsonDocument::fromJson(data, &jsonpe); if ( == QJsonParseError::NoError)
{
if (jsonDocument.isObject())
{
QJsonObject obj = jsonDocument.object();
ains("created"))
{
QJsonValue value = obj.take("created");
if(value.isBool())
{
bool m_created = Bool();
if(m_created == true)
{
//处理
}
}
}
}
}
else
{
QString errorStr = String();
}
rapidjson
rapidjson是腾讯的开源json解析框架,⽤c++实现。由于全部代码仅⽤header file实现,所以很容易集成到项⽬中。rapidjson的性能也⾮常出⾊。
各⼤json库性能测试:
官⽅教程:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论