「Qtの基礎 - JSON」の版間の差分

ナビゲーションに移動 検索に移動
278行目: 278行目:
     catch (QException &ex) {
     catch (QException &ex) {
       qWarning("Could not modify json file.");
       qWarning("Could not modify json file.");
      file.close();
      return -1;
    }
    file.close();
    return a.exec();
}
</syntaxhighlight>
<br><br>
== JSONファイルのオブジェクトの削除 ==
以下に示すようなJSONファイルにおいて、各オブジェクトから<u>fuga</u>キーの値がffのオブジェクトを削除する。<br>
<syntaxhighlight lang="json">
[
    {
      "hoge": "aa",
      "piyo": "bb",
      "fuga": "cc"
    },
    {
    {
      "hoge": "dd",
      "piyo": "ee",
      "fuga": "ff"
    },
    {
      "hoge": "gg",
      "piyo": "hh",
      "fuga": "ii"
    }
]
</syntaxhighlight>
<br>
JSONファイルの任意のオブジェクトを削除する場合、以下に示す手順に従う。<br>
# JSONファイルの読み込み
#: <code>QFile</code>クラスおよび<code>QJsonDocument</code>クラスを使用して、JSONファイルを読み込む。
# "fuga"キーの値の確認
#: <code>QJsonDocument</code>クラスを使用して読み込んだデータを解析する。
#: 各オブジェクトの"fuga"キーの値を確認して、値が"ff"と一致するものを特定する。
# 条件に一致するオブジェクトの削除
#: 条件に一致するオブジェクトを配列から削除する。
# 変更をファイルに保存
#: 変更後のJSONデータをファイルに再保存する。
<br>
以下の例では、JSONファイルからデータを読み込み、各オブジェクトにあるfugaキーの値がffのオブジェクトを削除して、その結果を元のファイルに上書き保存している。<br>
<syntaxhighlight lang="c++">
#include <QCoreApplication>
#include <QFile>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("/path/to/your/jsonfile.json");
    if (!file.open(QIODevice::ReadOnly)) {
      qWarning("ファイルを開けませんでした。");
      return -1;
    }
    QByteArray data = file.readAll();
    QJsonDocument doc(QJsonDocument::fromJson(data));
    QJsonArray array = doc.array();
    // "fuga"キーの値が"ff"のオブジェクトを削除する
    QJsonArray newArray;
    QString targetfugaStr = "ff";
    for (int i = 0; i < array.size(); ++i) {
      QJsonObject obj = array[i].toObject();
      QString fugaString = obj["fuga"].toString()
      if (targetfugaStr != targetDate) {
          newArray.append(obj);
      }
    }
    // 変更をファイルに保存
    QJsonDocument saveDoc(newArray);
    if (!file.open(QIODevice::WriteOnly)) {
      qWarning("ファイルを書き込みモードで開けませんでした");
      return -1;
    }
    try {
      file.write(saveDoc.toJson());
    }
    catch (QException &ex) {
      qWarning("JSONファイルの保存に失敗しました");
       file.close();
       file.close();
   
   

案内メニュー