Qt json使用

JSON 6 种基本数据类型

QJsonValue::Bool
QJsonValue::Double
QJsonValue::String
QJsonValue::Array
QJsonValue::Object
QJsonValue::Null

JSON 常用类

QJsonDocument //JSON 文档
QJsonArray //JSON 数组
QJsonObject //JSON 对象
QJsonParseError //JSON 错误

JSON 对象

{
    "name": "admin",
    "age": 30
}

构建

//构建 JSON 对象
QJsonObject json;
json.insert("name", "admin");
json.insert("age", 30);

//构建 JSON 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);

解析

QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError);  // 转化为 JSON 文档
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {  // 解析未发生错误
    if (doucment.isObject()) { // JSON 文档为对象
        QJsonObject object = doucment.object();  // 转化为对象
        if (object.contains("name")) {  // 包含指定的 key
            QJsonValue value = object.value("name");  // 获取指定 key 对应的 value
            if (value.isString()) {  // 判断 value 是否为字符串
                QString strName = value.toString();  // 将 value 转化为字符串
                qDebug() << "name : " << strName;
            }
        }
        if (object.contains("age")) { //key判断无先后顺序
            QJsonValue value = object.value("age");
            if (value.isDouble()) {
                int age = value.toVariant().toInt();
                qDebug() << "age : " << age;
            }
        }
    }
}

JSON 数组

[
    "admin",
    30,
]

构建

// 构建 JSON 数组
QJsonArray json;
json.append("admin");
json.append(30);

// 构建 JSON 文档
QJsonDocument document;
document.setArray(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);

解析

QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError);
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {
    if (doucment.isArray()) {
        QJsonArray array = doucment.array();
        int size = array.size();  // 获取数组大小
        for (int i = 0; i < size; i++) {  // 遍历数组
            QJsonValue value = array.at(i);
            if (value.type() == QJsonValue::String) {
                QString strName = value.toString();
                qDebug() << strName;
            }
            if (value.type() == QJsonValue::Double) {
                double age = value.toDouble();
                qDebug() << age;
            }
        }
    }
}
posted @ 2018-08-13 11:18  thomas_blog  阅读(354)  评论(0编辑  收藏  举报