50.Qt-QJsonDocument讀寫json

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

1.解析JSON-示例json

注意:JSON中的Key命名不能相同,不然的話會覆蓋掉,好比:數組

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

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

json文件示例內容以下:函數

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

程序以下:spa

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;
}

打印以下:code

 

寫JSON-示例對象

代碼以下:blog

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();
}

文件保存以下:rem

 

相關文章
相關標籤/搜索