1

JSON解析实例(Qt含源码)

 2 years ago
source link: https://blog.51cto.com/u_15696298/5450150
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

JSON解析

Qt中内置了一个QJsonDocument类用来处理json文件,以及json字符串。解析思路先将string加载到QJsonDocument中,然后将其逐层解析。json的格式包含两种,1)对象,2)数组

名字 解析
QJsonDocument 一个封装完整JSON文档的类,可以从UTF-8编码的基于文本的表示以及Qt自己的二进制格式读取和写入该文档
QJsonObject 是键值对的列表,其中键是唯一的字符串,值由QJsonValue表示。
QJsonArray JSON数组是一个值列表。可以通过从数组中插入和删除QJsonValue来操作该列表。
QJsonValue JSON是一种存储结构化数据的格式。它有6种基本数据类型:bool、double、string、array、object、null
QJsonParseError 用于在JSON解析期间报告错误
{"Name":"小明","age":18}

Qt json解析对象 代码

void MainWindow::parseObject()
{
    QString str = "{\"Name\":\"小明\",\"Age\":18}";
    QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
    QJsonObject jobject = jdoc.object();
    QJsonValue jvalue_name = jobject.value("Name");
    qInfo() << jvalue_name.toString();
    QJsonValue jvalue_age = jobject.value("Age");
    qInfo() << jvalue_age.toInt();

    ///////// 遍历 /////////////
    foreach (auto item, jobject.keys()) {
        qInfo() << "key:" << item;
        QJsonValue jvalue = jobject.value(item);
        qInfo() << "value:" << jvalue.toVariant();
    }
}
"小明"
18
key: "Age"
value: QVariant(double, 18)
key: "Name"
value: QVariant(QString, "小明")
["apple","orange","banana","watermelon"]

Qt json解析数组代码

void MainWindow::parseArray()
{
    QString str = "[\"apple\",\"orange\",\"banana\",\"watermelon\"]";
    QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
    QJsonArray jArray = jdoc.array();
    // item 为QJsonValue类型
    foreach (auto item, jArray) {
        qInfo() << item.toString();
    }
}
"apple"
"orange"
"banana"
"watermelon"

数组对象混合解析

{"Lists":["apple","orange"]}

Qt json解析代码

void MainWindow::parseObjectArray()
{
    QString str = "{\"Lists\":[\"apple\",\"orange\"]}";
    QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
    QJsonObject jObject = jdoc.object();
    QJsonValue jLists = jObject.value("Lists");
    QJsonArray jArray = jLists.toArray();
    // item 为QJsonValue类型
    foreach (auto item, jArray) {
        qInfo() << "value:" << item.toString();
    }
}
value: "apple"
value: "orange"

对象数组混合解析

[{"Name":"小明","age":18},{"Name":"小王","age":20}]

Qt 解析json代码

void MainWindow::parseArrayObject()
{
    QString str =
        "[{\"Name\":\"小明\",\"age\":18},{\"Name\":\"小王\",\"age\":20}]";
    QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
    QJsonArray jLists = jdoc.array();
    foreach (auto item, jLists) {
        QJsonObject item_object = item.toObject();
        qInfo() << "===============================";
        qInfo() << "name:" << item_object.value("Name").toString();
        qInfo() << "age:" << item_object.value("age").toDouble();
    }
}
===============================
name: "小明"
age: 18
===============================
name: "小王"
age: 20

公众号:【qt小王子】

JSON解析实例(Qt含源码)_数组


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK