1. 程式人生 > 其它 >Qt處理Json資料

Qt處理Json資料

1. Qt Json

例子一

我覺得認真看例子是能看懂的

部落格地址:https://www.cnblogs.com/wanghongyang

#include "qjson.h"
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QTextStream>

void QJsonTest::buildAndSaveCompleteJsonData()
{
    QJsonObject jsonRoot;
    // add a boolean value
    jsonRoot["isBoolean"] = true;

    // add a string value
    jsonRoot["addString"] = "stringHere";

    // add a int value
    jsonRoot["addInt"] = 123;

    // add a double value
    jsonRoot["addDouble"] = 3.1415926;

    // add a json array
    QJsonArray jsonArray;
    jsonArray.append("Hello");
    jsonArray.append("Qt");
    jsonArray.append("Json");
    jsonArray.append("Array");
    jsonRoot["jsonArray"] = jsonArray;

    // add another json object
    QJsonObject jsonAnotherObject;
    jsonAnotherObject["subJsonObject"] = "Hello another object";
    jsonRoot["anotherObject"] = jsonAnotherObject;

    saveJsonDataToFile(jsonRoot);
}

bool QJsonTest::saveJsonDataToFile(QJsonObject const &jsonObj)
{
    QJsonDocument jsonDoc(jsonObj);
    QString jsonString = jsonDoc.toJson(QJsonDocument::Indented);

    QFile saveFile("json.txt");
    if (!saveFile.open(QFile::WriteOnly))
    {
        return false;
    }
    saveFile.write(jsonString.toLocal8Bit());
    saveFile.close();
    return true;
}

void QJsonTest::parseJsonDataFromFile()
{
    QFile openFile("json.txt");
    if (!openFile.exists())
        return;
    openFile.open(QFile::ReadOnly | QFile::Text);

    // get all file data to a Text Stream and convert it to QByteArray
    QTextStream inStream(&openFile);
    QString jsonString = inStream.readAll();
    // make QJsonDocument from QByteArray
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toLocal8Bit());
    QJsonObject jsonRoot = jsonDoc.object();

    // parse boolean value
    bool booleanData = jsonRoot["isBoolean"].toBool();

    // parse string value
    QString stringData = jsonRoot["addString"].toString();

    // parse double value
    double doubleData = jsonRoot["addDouble"].toDouble();

    // parse int value
    int intData = jsonRoot["addInt"].toInt();

    // parse jsonArray value
    QJsonArray jsonArrayData = jsonRoot["jsonArray"].toArray();
    std::for_each(jsonArrayData.begin(), jsonArrayData.end(), [](QJsonValue const &valueItem) {
        const QString arrayItemString = valueItem.toString();
    });

    // parse json sub Object
    QJsonObject jsonSubObj = jsonRoot["anotherObject"].toObject();
    QString subObjString = jsonSubObj["subJsonObject"].toString();
}

自己對照上面的寫了個例子

#include <QCoreApplication>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QFile>
#include <QDebug>
#include <QJsonValue>
void writeJson() {
    QJsonObject parent;
    QJsonObject obj;
    obj.insert("Name", "Ace");
    obj.insert("PassWord", "man");
    QJsonArray array;
    array.append("Sabo");
    array.append("Monkey D. Luffy");
    obj.insert("chats", array);
    QJsonObject obj1;
    obj1.insert("Name", "boooK");
    obj1.insert("PassWord", "123456");
    QJsonArray array1;
    array1.append("Sabo");
    array1.append("Monkey D. Luffy");
    obj1.insert("chats", array1);
    parent.insert("Ace", obj);
    parent.insert("boooK", obj1);
    QJsonDocument doc(parent);
    QByteArray json = doc.toJson();
    QFile file("E:\\Project\\Qt\\QJson\\data.json");
    file.open(QFile::WriteOnly);
    file.write(json);
    file.close();
}

void readJson() {
    QFile file("E:\\Project\\Qt\\QJson\\data.json");
    file.open(QFile::ReadOnly);
    QByteArray json = file.readAll();
    file.close();
    QJsonDocument doc = QJsonDocument::fromJson(json);
    QJsonObject obj = doc.object();
    QStringList keys = obj.keys();
    for(int i = 0; i < keys.size(); ++i) {
        QString key = keys.at(i);
        QJsonValue value = obj.value(key);
        QJsonObject obj1 = value.toObject();
        // 獲得子項的key
        //QStringList ls = obj.keys();
        //for(int j=0; i<ls.size(); ++j){
        // QJsonValue subVal = obj1.value(ls.at(i));
        //}
        QJsonValue tmp = obj1.value("Name");
        QString name = tmp.toString();
        tmp = obj1.value("PassWord");
        QString password = tmp.toString();
        tmp = obj1.value("chats");
        QJsonArray array = tmp.toArray();
        QStringList list;
        for(int j = 0; j < array.size(); j++) {
            list.append(array[j].toString());
        }
        qDebug() << "Name: " << name << " Password: " << password << endl;
        qDebug() << "chats: " << list;
    }
}





int main(int argc, char* argv[]) {
    QCoreApplication a(argc, argv);
    writeJson();
    readJson();
    return a.exec();
}

資料如下: