关于QJson能解析的最大数据长度的源码分析

关于QJson能解析的最大数据长度的源码分析

最近在使用QJson的时候,发现在60Mb+不到70Mb的时候,就会解析失败。我们看看Qt中有没有对QJson能解析的数据长度的限制。

在文件Qt\Qt5.14.2\5.14.2\Src\qtbase\src\corelib\serialization\qjsondocument.cpp
第392-396行

QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error)
{
   
    QJsonPrivate::Parser parser(json.constData(), json.length());
    return parser.parse(error);
}

在文件:

QJsonDocument Parser::parse(QJsonParseError *error)
{
   
//其余省略
    if (token == BeginArray) {
   
        if (!parseArray())
            goto error;
    } else if (token == BeginObject
使用 QJson 库可以解析 JSON 文件。以下是解析 JSON 文件的基本步骤: 1. 包含 QJson 库头文件: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> ``` 2. 从文件中读取 JSON 数据: ```cpp QFile file("data.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); ``` 3. 将 JSON 数据解析成 QJsonDocument 对象: ```cpp QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); ``` 4. 从 QJsonDocument 对象中获取 QJsonObject 或 QJsonArray: ```cpp if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); // 处理 QJsonObject 对象 } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); // 处理 QJsonArray 对象 } ``` 5. 从 QJsonObject 或 QJsonArray 中获取具体的 JSON 数据: ```cpp // 从 QJsonObject 中获取字符串数据 QString name = jsonObj["name"].toString(); // 从 QJsonArray 中获取整数数据 int age = jsonArray[0].toInt(); ``` 完整的代码示例: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QFile> void parseJsonFile(const QString &fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); QString name = jsonObj["name"].toString(); int age = jsonObj["age"].toInt(); qDebug() << "Name: " << name << ", Age: " << age; } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); foreach (const QJsonValue & value, jsonArray) { int age = value.toInt(); qDebug() << "Age: " << age; } } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值