Qt:QJson

解析json

1. 使用QVariantMap/QVariantList一次性获取键值
2. 使用key1.key2.key3……一层层获取值

步骤

  1. 字符串转json文档:QJsonDocument::fromJson
  2. 对象是什么类型:isNull()/isObject()/isArray()
  3. 转为对象或数组:toObject()/toArray()
  4. QJsonObject对象获取json值
    是否包含键:contains(“key”)
    转QJsonValue:value(“key”)或object[“key”]
  5. 获取具体值
    判断类型:isNull()/isObject()/isString()/isDouble()
    QJsonValue转QJsonArray:toArray()
    QJsonValue转QJsonObject:toObject()
    QJsonValue转Qstring:toString()
    QJsonValue转Qvariant:toVariant()
  6. 遍历数组
    QJsonArray array;
    foreach (const QJsonValue &i, array) {
    qDebug << toVariant();
    }

生成json字符串

/**
 * @description: 生成json字符串
 * @param {type} 
 * @return: 
 */
QString get_json(const QVariantMap &map)
{
    QJsonDocument jsonDocument = QJsonDocument::fromVariant(map); // 获取QJsonDocument对象 
    if (!jsonDocument.isNull())
    {
        return jsonDocument.toJson(); // 生成JSON文档
    }
    return "{}";
}

QString get_json(const QVariantList &li)
{
    QJsonDocument jsonDocument = QJsonDocument::fromVariant(li);
    if (!jsonDocument.isNull())
    {
        return jsonDocument.toJson();
    }
    return "{}";
}

json文档

/**
 * @description: 读json文件
 * @param {type} 
 * @return: 
 */
int read_json_file(const QString &fileName, QJsonObject &root) {
    int res = -1;
    
    if (QFile::exists(fileName)) {
        QFile file(fileName);

        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            QByteArray json = file.readAll();
            
            QJsonParseError error;
            QJsonDocument jsonDocument = QJsonDocument::fromJson(json, &error);
            root = jsonDocument.object();
    
            if (QJsonParseError::NoError == error.error) {
                res = 0;  
            } else {
                qDebug() << error.errorString() << ", Offset: " << error.offset;
            }
            
            file.close();
        }
    }

    return res;
}

/**
 * @description: 写入json文件
 * @param {type} 
 * @return: 
 */
int write_json_file(const QString &fileName, const QString &jsonStr) {
    int len = -1;
    QByteArray json = jsonStr.toUtf8(); // json 的内容

    QFile file(fileName);
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        len = file.write(json);
        file.flush();
        file.close();
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值