天天看點

50.Qt-QJsonDocument讀寫json1.解析JSON-示例寫JSON-示例

  • QJsonDocument: 提供一種讀取和寫入JSON文檔的方法,可以通過它的的成員函數array()或object()檢索文檔中包含的數組或對象,然後讀取JSON資料,或者修改資料。
  • QJsonObject:  封裝了一個JSON對象, 可以使用它的成員函數size()、insert()和remove()來對修改JSON資料.
  • QJsonArray:  封裝了一個JSON數組,用來實作JSON數組的

1.解析JSON-示例

注意:JSON中的Key命名不能相同,否則的話會覆寫掉,比如:

{
    "FLAG": 1,
    "FLAG": "example"
}
           

最終隻能讀取到FLAG的"example"值.

json檔案示例内容如下:

{
    "FLAG": 1,
    "NAME": "example",
    "ARRAYS":
    [
        {
            "Name":       "array1",
            "String":     "哈哈哒1"
        },
        {
            "Name":       "array2",
            "String":     "哈哈哒2"
        },
        {
            "Name":       "array3",
            "String":     "哈哈哒3"
        },
        {
            "Name":       "array4",
            "String":     "哈哈哒4"
        }
    ]
}
           

程式如下:

bool parseJson()
{
     //打開檔案
     QFile file(QApplication::applicationDirPath()+"/1.json");
     if(!file.open(QIODevice::ReadOnly)) {
         qDebug() << "File open failed!";
     } else {
         qDebug() <<"File open successfully!";
     }
     QJsonParseError *error=new QJsonParseError;
     QJsonDocument jdc=QJsonDocument::fromJson(file.readAll(),error);

     //判斷檔案是否完整
     if(error->error!=QJsonParseError::NoError)
     {
       qDebug()<<"parseJson:"<<error->errorString();
       return false;
     }


     QJsonObject obj = jdc.object();        //擷取對象
     qDebug() <<"object size:"<<obj.size();

     QStringList list =  obj.keys();
     foreach (QString key, list) {
          if(obj[key].isString())
         {
            qDebug()<<"key:"<<key<<"value:"<<obj[key].toString();
         }
         else if(obj[key].isArray() && key =="ARRAYS")
         {
             QJsonArray arr =  obj[key].toArray();
             for(int i=0;i<arr.count();i++)
             {
                QJsonObject arrObj= arr[i].toObject();
                qDebug()<<"key:\"Name\""<<"value:"<<arrObj["Name"].toString();
                qDebug()<<"key:\"String\""<<"value:"<<arrObj["String"].toString();
             }
         }
     }

     return true;
}
           

列印如下:

50.Qt-QJsonDocument讀寫json1.解析JSON-示例寫JSON-示例

寫JSON-示例

代碼如下:

bool writeJson()
{
    //打開檔案
    QFile file(QApplication::applicationDirPath()+"/1.json");
    if(!file.open(QIODevice::WriteOnly)) {
        qDebug() << "File open failed!";
    } else {
        qDebug() <<"File open successfully!";
    }

    QJsonDocument jdoc;
    QJsonObject obj;
    QJsonArray arr;

    for(int i=1;i<5;i++)
    {
        QJsonObject Member;     //定義數組成員
        Member["Name"] = QString("array%1").arg(i);
        Member["String"] = QString("哈哈哒%1").arg(i);
        arr.append(Member);
    }

    obj["ARRAYS"] = arr;
    obj["NAME"] ="example";
    obj["FLAG"] ="1";

    jdoc.setObject(obj);
    file.write(jdoc.toJson(QJsonDocument::Indented)); //Indented:表示自動添加/n回車符
    file.close();
}
           

檔案儲存如下:

50.Qt-QJsonDocument讀寫json1.解析JSON-示例寫JSON-示例